clang 15.0.7
altivec.h
Go to the documentation of this file.
1/*===---- altivec.h - Standard header for type generic math ---------------===*\
2 *
3 * Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
4 * See https://llvm.org/LICENSE.txt for license information.
5 * SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
6 *
7\*===----------------------------------------------------------------------===*/
8
9#ifndef __ALTIVEC_H
10#define __ALTIVEC_H
11
12#ifndef __ALTIVEC__
13#error "AltiVec support not enabled"
14#endif
15
16/* Constants for mapping CR6 bits to predicate result. */
17
18#define __CR6_EQ 0
19#define __CR6_EQ_REV 1
20#define __CR6_LT 2
21#define __CR6_LT_REV 3
22#define __CR6_GT 4
23#define __CR6_GT_REV 5
24#define __CR6_SO 6
25#define __CR6_SO_REV 7
26
27/* Constants for vec_test_data_class */
28#define __VEC_CLASS_FP_SUBNORMAL_N (1 << 0)
29#define __VEC_CLASS_FP_SUBNORMAL_P (1 << 1)
30#define __VEC_CLASS_FP_SUBNORMAL (__VEC_CLASS_FP_SUBNORMAL_P | \
31 __VEC_CLASS_FP_SUBNORMAL_N)
32#define __VEC_CLASS_FP_ZERO_N (1<<2)
33#define __VEC_CLASS_FP_ZERO_P (1<<3)
34#define __VEC_CLASS_FP_ZERO (__VEC_CLASS_FP_ZERO_P | \
35 __VEC_CLASS_FP_ZERO_N)
36#define __VEC_CLASS_FP_INFINITY_N (1<<4)
37#define __VEC_CLASS_FP_INFINITY_P (1<<5)
38#define __VEC_CLASS_FP_INFINITY (__VEC_CLASS_FP_INFINITY_P | \
39 __VEC_CLASS_FP_INFINITY_N)
40#define __VEC_CLASS_FP_NAN (1<<6)
41#define __VEC_CLASS_FP_NOT_NORMAL (__VEC_CLASS_FP_NAN | \
42 __VEC_CLASS_FP_SUBNORMAL | \
43 __VEC_CLASS_FP_ZERO | \
44 __VEC_CLASS_FP_INFINITY)
45
46#define __ATTRS_o_ai __attribute__((__overloadable__, __always_inline__))
47
48#include <stddef.h>
49
50static __inline__ vector signed char __ATTRS_o_ai vec_perm(
51 vector signed char __a, vector signed char __b, vector unsigned char __c);
52
53static __inline__ vector unsigned char __ATTRS_o_ai
54vec_perm(vector unsigned char __a, vector unsigned char __b,
55 vector unsigned char __c);
56
57static __inline__ vector bool char __ATTRS_o_ai
58vec_perm(vector bool char __a, vector bool char __b, vector unsigned char __c);
59
60static __inline__ vector short __ATTRS_o_ai vec_perm(vector signed short __a,
61 vector signed short __b,
62 vector unsigned char __c);
63
64static __inline__ vector unsigned short __ATTRS_o_ai
65vec_perm(vector unsigned short __a, vector unsigned short __b,
66 vector unsigned char __c);
67
68static __inline__ vector bool short __ATTRS_o_ai vec_perm(
69 vector bool short __a, vector bool short __b, vector unsigned char __c);
70
71static __inline__ vector pixel __ATTRS_o_ai vec_perm(vector pixel __a,
72 vector pixel __b,
73 vector unsigned char __c);
74
75static __inline__ vector int __ATTRS_o_ai vec_perm(vector signed int __a,
76 vector signed int __b,
77 vector unsigned char __c);
78
79static __inline__ vector unsigned int __ATTRS_o_ai vec_perm(
80 vector unsigned int __a, vector unsigned int __b, vector unsigned char __c);
81
82static __inline__ vector bool int __ATTRS_o_ai
83vec_perm(vector bool int __a, vector bool int __b, vector unsigned char __c);
84
85static __inline__ vector float __ATTRS_o_ai vec_perm(vector float __a,
86 vector float __b,
87 vector unsigned char __c);
88
89#ifdef __VSX__
90static __inline__ vector long long __ATTRS_o_ai
91vec_perm(vector signed long long __a, vector signed long long __b,
92 vector unsigned char __c);
93
94static __inline__ vector unsigned long long __ATTRS_o_ai
95vec_perm(vector unsigned long long __a, vector unsigned long long __b,
96 vector unsigned char __c);
97
98static __inline__ vector bool long long __ATTRS_o_ai
99vec_perm(vector bool long long __a, vector bool long long __b,
100 vector unsigned char __c);
101
102static __inline__ vector double __ATTRS_o_ai vec_perm(vector double __a,
103 vector double __b,
104 vector unsigned char __c);
105#endif
106
107static __inline__ vector unsigned char __ATTRS_o_ai
108vec_xor(vector unsigned char __a, vector unsigned char __b);
109
110/* vec_abs */
111
112#define __builtin_altivec_abs_v16qi vec_abs
113#define __builtin_altivec_abs_v8hi vec_abs
114#define __builtin_altivec_abs_v4si vec_abs
115
116static __inline__ vector signed char __ATTRS_o_ai
117vec_abs(vector signed char __a) {
118 return __builtin_altivec_vmaxsb(__a, -__a);
119}
120
121static __inline__ vector signed short __ATTRS_o_ai
122vec_abs(vector signed short __a) {
123 return __builtin_altivec_vmaxsh(__a, -__a);
124}
125
126static __inline__ vector signed int __ATTRS_o_ai
127vec_abs(vector signed int __a) {
128 return __builtin_altivec_vmaxsw(__a, -__a);
129}
130
131#ifdef __POWER8_VECTOR__
132static __inline__ vector signed long long __ATTRS_o_ai
133vec_abs(vector signed long long __a) {
134 return __builtin_altivec_vmaxsd(__a, -__a);
135}
136#endif
137
138static __inline__ vector float __ATTRS_o_ai vec_abs(vector float __a) {
139#ifdef __VSX__
140 return __builtin_vsx_xvabssp(__a);
141#else
142 vector unsigned int __res =
143 (vector unsigned int)__a & (vector unsigned int)(0x7FFFFFFF);
144 return (vector float)__res;
145#endif
146}
147
148#ifdef __VSX__
149static __inline__ vector double __ATTRS_o_ai vec_abs(vector double __a) {
150 return __builtin_vsx_xvabsdp(__a);
151}
152#endif
153
154/* vec_abss */
155#define __builtin_altivec_abss_v16qi vec_abss
156#define __builtin_altivec_abss_v8hi vec_abss
157#define __builtin_altivec_abss_v4si vec_abss
158
159static __inline__ vector signed char __ATTRS_o_ai
160vec_abss(vector signed char __a) {
161 return __builtin_altivec_vmaxsb(
162 __a, __builtin_altivec_vsubsbs((vector signed char)(0), __a));
163}
164
165static __inline__ vector signed short __ATTRS_o_ai
166vec_abss(vector signed short __a) {
167 return __builtin_altivec_vmaxsh(
168 __a, __builtin_altivec_vsubshs((vector signed short)(0), __a));
169}
170
171static __inline__ vector signed int __ATTRS_o_ai
172vec_abss(vector signed int __a) {
173 return __builtin_altivec_vmaxsw(
174 __a, __builtin_altivec_vsubsws((vector signed int)(0), __a));
175}
176
177/* vec_absd */
178#if defined(__POWER9_VECTOR__)
179
180static __inline__ vector unsigned char __ATTRS_o_ai
181vec_absd(vector unsigned char __a, vector unsigned char __b) {
182 return __builtin_altivec_vabsdub(__a, __b);
183}
184
185static __inline__ vector unsigned short __ATTRS_o_ai
186vec_absd(vector unsigned short __a, vector unsigned short __b) {
187 return __builtin_altivec_vabsduh(__a, __b);
188}
189
190static __inline__ vector unsigned int __ATTRS_o_ai
191vec_absd(vector unsigned int __a, vector unsigned int __b) {
192 return __builtin_altivec_vabsduw(__a, __b);
193}
194
195#endif /* End __POWER9_VECTOR__ */
196
197/* vec_add */
198
199static __inline__ vector signed char __ATTRS_o_ai
200vec_add(vector signed char __a, vector signed char __b) {
201 return __a + __b;
202}
203
204static __inline__ vector signed char __ATTRS_o_ai
205vec_add(vector bool char __a, vector signed char __b) {
206 return (vector signed char)__a + __b;
207}
208
209static __inline__ vector signed char __ATTRS_o_ai
210vec_add(vector signed char __a, vector bool char __b) {
211 return __a + (vector signed char)__b;
212}
213
214static __inline__ vector unsigned char __ATTRS_o_ai
215vec_add(vector unsigned char __a, vector unsigned char __b) {
216 return __a + __b;
217}
218
219static __inline__ vector unsigned char __ATTRS_o_ai
220vec_add(vector bool char __a, vector unsigned char __b) {
221 return (vector unsigned char)__a + __b;
222}
223
224static __inline__ vector unsigned char __ATTRS_o_ai
225vec_add(vector unsigned char __a, vector bool char __b) {
226 return __a + (vector unsigned char)__b;
227}
228
229static __inline__ vector short __ATTRS_o_ai vec_add(vector short __a,
230 vector short __b) {
231 return __a + __b;
232}
233
234static __inline__ vector short __ATTRS_o_ai vec_add(vector bool short __a,
235 vector short __b) {
236 return (vector short)__a + __b;
237}
238
239static __inline__ vector short __ATTRS_o_ai vec_add(vector short __a,
240 vector bool short __b) {
241 return __a + (vector short)__b;
242}
243
244static __inline__ vector unsigned short __ATTRS_o_ai
245vec_add(vector unsigned short __a, vector unsigned short __b) {
246 return __a + __b;
247}
248
249static __inline__ vector unsigned short __ATTRS_o_ai
250vec_add(vector bool short __a, vector unsigned short __b) {
251 return (vector unsigned short)__a + __b;
252}
253
254static __inline__ vector unsigned short __ATTRS_o_ai
255vec_add(vector unsigned short __a, vector bool short __b) {
256 return __a + (vector unsigned short)__b;
257}
258
259static __inline__ vector int __ATTRS_o_ai vec_add(vector int __a,
260 vector int __b) {
261 return __a + __b;
262}
263
264static __inline__ vector int __ATTRS_o_ai vec_add(vector bool int __a,
265 vector int __b) {
266 return (vector int)__a + __b;
267}
268
269static __inline__ vector int __ATTRS_o_ai vec_add(vector int __a,
270 vector bool int __b) {
271 return __a + (vector int)__b;
272}
273
274static __inline__ vector unsigned int __ATTRS_o_ai
275vec_add(vector unsigned int __a, vector unsigned int __b) {
276 return __a + __b;
277}
278
279static __inline__ vector unsigned int __ATTRS_o_ai
280vec_add(vector bool int __a, vector unsigned int __b) {
281 return (vector unsigned int)__a + __b;
282}
283
284static __inline__ vector unsigned int __ATTRS_o_ai
285vec_add(vector unsigned int __a, vector bool int __b) {
286 return __a + (vector unsigned int)__b;
287}
288
289#ifdef __POWER8_VECTOR__
290static __inline__ vector signed long long __ATTRS_o_ai
291vec_add(vector signed long long __a, vector signed long long __b) {
292 return __a + __b;
293}
294
295static __inline__ vector unsigned long long __ATTRS_o_ai
296vec_add(vector unsigned long long __a, vector unsigned long long __b) {
297 return __a + __b;
298}
299
300#ifdef __SIZEOF_INT128__
301static __inline__ vector signed __int128 __ATTRS_o_ai
302vec_add(vector signed __int128 __a, vector signed __int128 __b) {
303 return __a + __b;
304}
305
306static __inline__ vector unsigned __int128 __ATTRS_o_ai
307vec_add(vector unsigned __int128 __a, vector unsigned __int128 __b) {
308 return __a + __b;
309}
310#endif
311
312static __inline__ vector unsigned char __attribute__((__always_inline__))
313vec_add_u128(vector unsigned char __a, vector unsigned char __b) {
314 return (vector unsigned char)__builtin_altivec_vadduqm(__a, __b);
315}
316#elif defined(__VSX__)
317static __inline__ vector signed long long __ATTRS_o_ai
318vec_add(vector signed long long __a, vector signed long long __b) {
319#ifdef __LITTLE_ENDIAN__
320 // Little endian systems on CPU's prior to Power8 don't really exist
321 // so scalarizing is fine.
322 return __a + __b;
323#else
324 vector unsigned int __res =
325 (vector unsigned int)__a + (vector unsigned int)__b;
326 vector unsigned int __carry = __builtin_altivec_vaddcuw(
327 (vector unsigned int)__a, (vector unsigned int)__b);
328 __carry = (vector unsigned int)__builtin_shufflevector(
329 (vector unsigned char)__carry, (vector unsigned char)__carry, 0, 0, 0, 7,
330 0, 0, 0, 0, 0, 0, 0, 15, 0, 0, 0, 0);
331 return (vector signed long long)(__res + __carry);
332#endif
333}
334
335static __inline__ vector unsigned long long __ATTRS_o_ai
336vec_add(vector unsigned long long __a, vector unsigned long long __b) {
337 return (vector unsigned long long)vec_add((vector signed long long)__a,
338 (vector signed long long)__b);
339}
340#endif // __POWER8_VECTOR__
341
342static __inline__ vector float __ATTRS_o_ai vec_add(vector float __a,
343 vector float __b) {
344 return __a + __b;
345}
346
347#ifdef __VSX__
348static __inline__ vector double __ATTRS_o_ai vec_add(vector double __a,
349 vector double __b) {
350 return __a + __b;
351}
352#endif // __VSX__
353
354/* vec_adde */
355
356#ifdef __POWER8_VECTOR__
357#ifdef __SIZEOF_INT128__
358static __inline__ vector signed __int128 __ATTRS_o_ai
359vec_adde(vector signed __int128 __a, vector signed __int128 __b,
360 vector signed __int128 __c) {
361 return (vector signed __int128)__builtin_altivec_vaddeuqm(
362 (vector unsigned __int128)__a, (vector unsigned __int128)__b,
363 (vector unsigned __int128)__c);
364}
365
366static __inline__ vector unsigned __int128 __ATTRS_o_ai
367vec_adde(vector unsigned __int128 __a, vector unsigned __int128 __b,
368 vector unsigned __int128 __c) {
369 return __builtin_altivec_vaddeuqm(__a, __b, __c);
370}
371#endif
372
373static __inline__ vector unsigned char __attribute__((__always_inline__))
374vec_adde_u128(vector unsigned char __a, vector unsigned char __b,
375 vector unsigned char __c) {
376 return (vector unsigned char)__builtin_altivec_vaddeuqm_c(
377 (vector unsigned char)__a, (vector unsigned char)__b,
378 (vector unsigned char)__c);
379}
380#endif
381
382static __inline__ vector signed int __ATTRS_o_ai
383vec_adde(vector signed int __a, vector signed int __b,
384 vector signed int __c) {
385 vector signed int __mask = {1, 1, 1, 1};
386 vector signed int __carry = __c & __mask;
387 return vec_add(vec_add(__a, __b), __carry);
388}
389
390static __inline__ vector unsigned int __ATTRS_o_ai
391vec_adde(vector unsigned int __a, vector unsigned int __b,
392 vector unsigned int __c) {
393 vector unsigned int __mask = {1, 1, 1, 1};
394 vector unsigned int __carry = __c & __mask;
395 return vec_add(vec_add(__a, __b), __carry);
396}
397
398/* vec_addec */
399
400#ifdef __POWER8_VECTOR__
401#ifdef __SIZEOF_INT128__
402static __inline__ vector signed __int128 __ATTRS_o_ai
403vec_addec(vector signed __int128 __a, vector signed __int128 __b,
404 vector signed __int128 __c) {
405 return (vector signed __int128)__builtin_altivec_vaddecuq(
406 (vector unsigned __int128)__a, (vector unsigned __int128)__b,
407 (vector unsigned __int128)__c);
408}
409
410static __inline__ vector unsigned __int128 __ATTRS_o_ai
411vec_addec(vector unsigned __int128 __a, vector unsigned __int128 __b,
412 vector unsigned __int128 __c) {
413 return __builtin_altivec_vaddecuq(__a, __b, __c);
414}
415#endif
416
417static __inline__ vector unsigned char __attribute__((__always_inline__))
418vec_addec_u128(vector unsigned char __a, vector unsigned char __b,
419 vector unsigned char __c) {
420 return (vector unsigned char)__builtin_altivec_vaddecuq_c(
421 (vector unsigned char)__a, (vector unsigned char)__b,
422 (vector unsigned char)__c);
423}
424
425#ifdef __powerpc64__
426static __inline__ vector signed int __ATTRS_o_ai
427vec_addec(vector signed int __a, vector signed int __b,
428 vector signed int __c) {
429
430 signed int __result[4];
431 for (int i = 0; i < 4; i++) {
432 unsigned int __tempa = (unsigned int) __a[i];
433 unsigned int __tempb = (unsigned int) __b[i];
434 unsigned int __tempc = (unsigned int) __c[i];
435 __tempc = __tempc & 0x00000001;
436 unsigned long long __longa = (unsigned long long) __tempa;
437 unsigned long long __longb = (unsigned long long) __tempb;
438 unsigned long long __longc = (unsigned long long) __tempc;
439 unsigned long long __sum = __longa + __longb + __longc;
440 unsigned long long __res = (__sum >> 32) & 0x01;
441 unsigned long long __tempres = (unsigned int) __res;
442 __result[i] = (signed int) __tempres;
443 }
444
445 vector signed int ret = { __result[0], __result[1], __result[2], __result[3] };
446 return ret;
447}
448
449static __inline__ vector unsigned int __ATTRS_o_ai
450vec_addec(vector unsigned int __a, vector unsigned int __b,
451 vector unsigned int __c) {
452
453 unsigned int __result[4];
454 for (int i = 0; i < 4; i++) {
455 unsigned int __tempc = __c[i] & 1;
456 unsigned long long __longa = (unsigned long long) __a[i];
457 unsigned long long __longb = (unsigned long long) __b[i];
458 unsigned long long __longc = (unsigned long long) __tempc;
459 unsigned long long __sum = __longa + __longb + __longc;
460 unsigned long long __res = (__sum >> 32) & 0x01;
461 unsigned long long __tempres = (unsigned int) __res;
462 __result[i] = (signed int) __tempres;
463 }
464
465 vector unsigned int ret = { __result[0], __result[1], __result[2], __result[3] };
466 return ret;
467}
468#endif // __powerpc64__
469#endif // __POWER8_VECTOR__
470
471/* vec_vaddubm */
472
473#define __builtin_altivec_vaddubm vec_vaddubm
474
475static __inline__ vector signed char __ATTRS_o_ai
476vec_vaddubm(vector signed char __a, vector signed char __b) {
477 return __a + __b;
478}
479
480static __inline__ vector signed char __ATTRS_o_ai
481vec_vaddubm(vector bool char __a, vector signed char __b) {
482 return (vector signed char)__a + __b;
483}
484
485static __inline__ vector signed char __ATTRS_o_ai
486vec_vaddubm(vector signed char __a, vector bool char __b) {
487 return __a + (vector signed char)__b;
488}
489
490static __inline__ vector unsigned char __ATTRS_o_ai
491vec_vaddubm(vector unsigned char __a, vector unsigned char __b) {
492 return __a + __b;
493}
494
495static __inline__ vector unsigned char __ATTRS_o_ai
496vec_vaddubm(vector bool char __a, vector unsigned char __b) {
497 return (vector unsigned char)__a + __b;
498}
499
500static __inline__ vector unsigned char __ATTRS_o_ai
501vec_vaddubm(vector unsigned char __a, vector bool char __b) {
502 return __a + (vector unsigned char)__b;
503}
504
505/* vec_vadduhm */
506
507#define __builtin_altivec_vadduhm vec_vadduhm
508
509static __inline__ vector short __ATTRS_o_ai vec_vadduhm(vector short __a,
510 vector short __b) {
511 return __a + __b;
512}
513
514static __inline__ vector short __ATTRS_o_ai vec_vadduhm(vector bool short __a,
515 vector short __b) {
516 return (vector short)__a + __b;
517}
518
519static __inline__ vector short __ATTRS_o_ai vec_vadduhm(vector short __a,
520 vector bool short __b) {
521 return __a + (vector short)__b;
522}
523
524static __inline__ vector unsigned short __ATTRS_o_ai
525vec_vadduhm(vector unsigned short __a, vector unsigned short __b) {
526 return __a + __b;
527}
528
529static __inline__ vector unsigned short __ATTRS_o_ai
530vec_vadduhm(vector bool short __a, vector unsigned short __b) {
531 return (vector unsigned short)__a + __b;
532}
533
534static __inline__ vector unsigned short __ATTRS_o_ai
535vec_vadduhm(vector unsigned short __a, vector bool short __b) {
536 return __a + (vector unsigned short)__b;
537}
538
539/* vec_vadduwm */
540
541#define __builtin_altivec_vadduwm vec_vadduwm
542
543static __inline__ vector int __ATTRS_o_ai vec_vadduwm(vector int __a,
544 vector int __b) {
545 return __a + __b;
546}
547
548static __inline__ vector int __ATTRS_o_ai vec_vadduwm(vector bool int __a,
549 vector int __b) {
550 return (vector int)__a + __b;
551}
552
553static __inline__ vector int __ATTRS_o_ai vec_vadduwm(vector int __a,
554 vector bool int __b) {
555 return __a + (vector int)__b;
556}
557
558static __inline__ vector unsigned int __ATTRS_o_ai
559vec_vadduwm(vector unsigned int __a, vector unsigned int __b) {
560 return __a + __b;
561}
562
563static __inline__ vector unsigned int __ATTRS_o_ai
564vec_vadduwm(vector bool int __a, vector unsigned int __b) {
565 return (vector unsigned int)__a + __b;
566}
567
568static __inline__ vector unsigned int __ATTRS_o_ai
569vec_vadduwm(vector unsigned int __a, vector bool int __b) {
570 return __a + (vector unsigned int)__b;
571}
572
573/* vec_vaddfp */
574
575#define __builtin_altivec_vaddfp vec_vaddfp
576
577static __inline__ vector float __attribute__((__always_inline__))
578vec_vaddfp(vector float __a, vector float __b) {
579 return __a + __b;
580}
581
582/* vec_addc */
583
584static __inline__ vector signed int __ATTRS_o_ai
585vec_addc(vector signed int __a, vector signed int __b) {
586 return (vector signed int)__builtin_altivec_vaddcuw((vector unsigned int)__a,
587 (vector unsigned int)__b);
588}
589
590static __inline__ vector unsigned int __ATTRS_o_ai
591vec_addc(vector unsigned int __a, vector unsigned int __b) {
592 return __builtin_altivec_vaddcuw(__a, __b);
593}
594
595#ifdef __POWER8_VECTOR__
596#ifdef __SIZEOF_INT128__
597static __inline__ vector signed __int128 __ATTRS_o_ai
598vec_addc(vector signed __int128 __a, vector signed __int128 __b) {
599 return (vector signed __int128)__builtin_altivec_vaddcuq(
600 (vector unsigned __int128)__a, (vector unsigned __int128)__b);
601}
602
603static __inline__ vector unsigned __int128 __ATTRS_o_ai
604vec_addc(vector unsigned __int128 __a, vector unsigned __int128 __b) {
605 return __builtin_altivec_vaddcuq(__a, __b);
606}
607#endif
608
609static __inline__ vector unsigned char __attribute__((__always_inline__))
610vec_addc_u128(vector unsigned char __a, vector unsigned char __b) {
611 return (vector unsigned char)__builtin_altivec_vaddcuq_c(
612 (vector unsigned char)__a, (vector unsigned char)__b);
613}
614#endif // defined(__POWER8_VECTOR__) && defined(__powerpc64__)
615
616/* vec_vaddcuw */
617
618static __inline__ vector unsigned int __attribute__((__always_inline__))
619vec_vaddcuw(vector unsigned int __a, vector unsigned int __b) {
620 return __builtin_altivec_vaddcuw(__a, __b);
621}
622
623/* vec_adds */
624
625static __inline__ vector signed char __ATTRS_o_ai
626vec_adds(vector signed char __a, vector signed char __b) {
627 return __builtin_altivec_vaddsbs(__a, __b);
628}
629
630static __inline__ vector signed char __ATTRS_o_ai
631vec_adds(vector bool char __a, vector signed char __b) {
632 return __builtin_altivec_vaddsbs((vector signed char)__a, __b);
633}
634
635static __inline__ vector signed char __ATTRS_o_ai
636vec_adds(vector signed char __a, vector bool char __b) {
637 return __builtin_altivec_vaddsbs(__a, (vector signed char)__b);
638}
639
640static __inline__ vector unsigned char __ATTRS_o_ai
641vec_adds(vector unsigned char __a, vector unsigned char __b) {
642 return __builtin_altivec_vaddubs(__a, __b);
643}
644
645static __inline__ vector unsigned char __ATTRS_o_ai
646vec_adds(vector bool char __a, vector unsigned char __b) {
647 return __builtin_altivec_vaddubs((vector unsigned char)__a, __b);
648}
649
650static __inline__ vector unsigned char __ATTRS_o_ai
651vec_adds(vector unsigned char __a, vector bool char __b) {
652 return __builtin_altivec_vaddubs(__a, (vector unsigned char)__b);
653}
654
655static __inline__ vector short __ATTRS_o_ai vec_adds(vector short __a,
656 vector short __b) {
657 return __builtin_altivec_vaddshs(__a, __b);
658}
659
660static __inline__ vector short __ATTRS_o_ai vec_adds(vector bool short __a,
661 vector short __b) {
662 return __builtin_altivec_vaddshs((vector short)__a, __b);
663}
664
665static __inline__ vector short __ATTRS_o_ai vec_adds(vector short __a,
666 vector bool short __b) {
667 return __builtin_altivec_vaddshs(__a, (vector short)__b);
668}
669
670static __inline__ vector unsigned short __ATTRS_o_ai
671vec_adds(vector unsigned short __a, vector unsigned short __b) {
672 return __builtin_altivec_vadduhs(__a, __b);
673}
674
675static __inline__ vector unsigned short __ATTRS_o_ai
676vec_adds(vector bool short __a, vector unsigned short __b) {
677 return __builtin_altivec_vadduhs((vector unsigned short)__a, __b);
678}
679
680static __inline__ vector unsigned short __ATTRS_o_ai
681vec_adds(vector unsigned short __a, vector bool short __b) {
682 return __builtin_altivec_vadduhs(__a, (vector unsigned short)__b);
683}
684
685static __inline__ vector int __ATTRS_o_ai vec_adds(vector int __a,
686 vector int __b) {
687 return __builtin_altivec_vaddsws(__a, __b);
688}
689
690static __inline__ vector int __ATTRS_o_ai vec_adds(vector bool int __a,
691 vector int __b) {
692 return __builtin_altivec_vaddsws((vector int)__a, __b);
693}
694
695static __inline__ vector int __ATTRS_o_ai vec_adds(vector int __a,
696 vector bool int __b) {
697 return __builtin_altivec_vaddsws(__a, (vector int)__b);
698}
699
700static __inline__ vector unsigned int __ATTRS_o_ai
701vec_adds(vector unsigned int __a, vector unsigned int __b) {
702 return __builtin_altivec_vadduws(__a, __b);
703}
704
705static __inline__ vector unsigned int __ATTRS_o_ai
706vec_adds(vector bool int __a, vector unsigned int __b) {
707 return __builtin_altivec_vadduws((vector unsigned int)__a, __b);
708}
709
710static __inline__ vector unsigned int __ATTRS_o_ai
711vec_adds(vector unsigned int __a, vector bool int __b) {
712 return __builtin_altivec_vadduws(__a, (vector unsigned int)__b);
713}
714
715/* vec_vaddsbs */
716
717static __inline__ vector signed char __ATTRS_o_ai
718vec_vaddsbs(vector signed char __a, vector signed char __b) {
719 return __builtin_altivec_vaddsbs(__a, __b);
720}
721
722static __inline__ vector signed char __ATTRS_o_ai
723vec_vaddsbs(vector bool char __a, vector signed char __b) {
724 return __builtin_altivec_vaddsbs((vector signed char)__a, __b);
725}
726
727static __inline__ vector signed char __ATTRS_o_ai
728vec_vaddsbs(vector signed char __a, vector bool char __b) {
729 return __builtin_altivec_vaddsbs(__a, (vector signed char)__b);
730}
731
732/* vec_vaddubs */
733
734static __inline__ vector unsigned char __ATTRS_o_ai
735vec_vaddubs(vector unsigned char __a, vector unsigned char __b) {
736 return __builtin_altivec_vaddubs(__a, __b);
737}
738
739static __inline__ vector unsigned char __ATTRS_o_ai
740vec_vaddubs(vector bool char __a, vector unsigned char __b) {
741 return __builtin_altivec_vaddubs((vector unsigned char)__a, __b);
742}
743
744static __inline__ vector unsigned char __ATTRS_o_ai
745vec_vaddubs(vector unsigned char __a, vector bool char __b) {
746 return __builtin_altivec_vaddubs(__a, (vector unsigned char)__b);
747}
748
749/* vec_vaddshs */
750
751static __inline__ vector short __ATTRS_o_ai vec_vaddshs(vector short __a,
752 vector short __b) {
753 return __builtin_altivec_vaddshs(__a, __b);
754}
755
756static __inline__ vector short __ATTRS_o_ai vec_vaddshs(vector bool short __a,
757 vector short __b) {
758 return __builtin_altivec_vaddshs((vector short)__a, __b);
759}
760
761static __inline__ vector short __ATTRS_o_ai vec_vaddshs(vector short __a,
762 vector bool short __b) {
763 return __builtin_altivec_vaddshs(__a, (vector short)__b);
764}
765
766/* vec_vadduhs */
767
768static __inline__ vector unsigned short __ATTRS_o_ai
769vec_vadduhs(vector unsigned short __a, vector unsigned short __b) {
770 return __builtin_altivec_vadduhs(__a, __b);
771}
772
773static __inline__ vector unsigned short __ATTRS_o_ai
774vec_vadduhs(vector bool short __a, vector unsigned short __b) {
775 return __builtin_altivec_vadduhs((vector unsigned short)__a, __b);
776}
777
778static __inline__ vector unsigned short __ATTRS_o_ai
779vec_vadduhs(vector unsigned short __a, vector bool short __b) {
780 return __builtin_altivec_vadduhs(__a, (vector unsigned short)__b);
781}
782
783/* vec_vaddsws */
784
785static __inline__ vector int __ATTRS_o_ai vec_vaddsws(vector int __a,
786 vector int __b) {
787 return __builtin_altivec_vaddsws(__a, __b);
788}
789
790static __inline__ vector int __ATTRS_o_ai vec_vaddsws(vector bool int __a,
791 vector int __b) {
792 return __builtin_altivec_vaddsws((vector int)__a, __b);
793}
794
795static __inline__ vector int __ATTRS_o_ai vec_vaddsws(vector int __a,
796 vector bool int __b) {
797 return __builtin_altivec_vaddsws(__a, (vector int)__b);
798}
799
800/* vec_vadduws */
801
802static __inline__ vector unsigned int __ATTRS_o_ai
803vec_vadduws(vector unsigned int __a, vector unsigned int __b) {
804 return __builtin_altivec_vadduws(__a, __b);
805}
806
807static __inline__ vector unsigned int __ATTRS_o_ai
808vec_vadduws(vector bool int __a, vector unsigned int __b) {
809 return __builtin_altivec_vadduws((vector unsigned int)__a, __b);
810}
811
812static __inline__ vector unsigned int __ATTRS_o_ai
813vec_vadduws(vector unsigned int __a, vector bool int __b) {
814 return __builtin_altivec_vadduws(__a, (vector unsigned int)__b);
815}
816
817#if defined(__POWER8_VECTOR__) && defined(__powerpc64__) && \
818 defined(__SIZEOF_INT128__)
819/* vec_vadduqm */
820
821static __inline__ vector signed __int128 __ATTRS_o_ai
822vec_vadduqm(vector signed __int128 __a, vector signed __int128 __b) {
823 return __a + __b;
824}
825
826static __inline__ vector unsigned __int128 __ATTRS_o_ai
827vec_vadduqm(vector unsigned __int128 __a, vector unsigned __int128 __b) {
828 return __a + __b;
829}
830
831/* vec_vaddeuqm */
832
833static __inline__ vector signed __int128 __ATTRS_o_ai
834vec_vaddeuqm(vector signed __int128 __a, vector signed __int128 __b,
835 vector signed __int128 __c) {
836 return (vector signed __int128)__builtin_altivec_vaddeuqm(
837 (vector unsigned __int128)__a, (vector unsigned __int128)__b,
838 (vector unsigned __int128)__c);
839}
840
841static __inline__ vector unsigned __int128 __ATTRS_o_ai
842vec_vaddeuqm(vector unsigned __int128 __a, vector unsigned __int128 __b,
843 vector unsigned __int128 __c) {
844 return __builtin_altivec_vaddeuqm(__a, __b, __c);
845}
846
847/* vec_vaddcuq */
848
849static __inline__ vector signed __int128 __ATTRS_o_ai
850vec_vaddcuq(vector signed __int128 __a, vector signed __int128 __b) {
851 return (vector signed __int128)__builtin_altivec_vaddcuq(
852 (vector unsigned __int128)__a, (vector unsigned __int128)__b);
853}
854
855static __inline__ vector unsigned __int128 __ATTRS_o_ai
856vec_vaddcuq(vector unsigned __int128 __a, vector unsigned __int128 __b) {
857 return __builtin_altivec_vaddcuq(__a, __b);
858}
859
860/* vec_vaddecuq */
861
862static __inline__ vector signed __int128 __ATTRS_o_ai
863vec_vaddecuq(vector signed __int128 __a, vector signed __int128 __b,
864 vector signed __int128 __c) {
865 return (vector signed __int128)__builtin_altivec_vaddecuq(
866 (vector unsigned __int128)__a, (vector unsigned __int128)__b,
867 (vector unsigned __int128)__c);
868}
869
870static __inline__ vector unsigned __int128 __ATTRS_o_ai
871vec_vaddecuq(vector unsigned __int128 __a, vector unsigned __int128 __b,
872 vector unsigned __int128 __c) {
873 return __builtin_altivec_vaddecuq(__a, __b, __c);
874}
875#endif // defined(__POWER8_VECTOR__) && defined(__powerpc64__)
876
877/* vec_and */
878
879#define __builtin_altivec_vand vec_and
880
881static __inline__ vector signed char __ATTRS_o_ai
882vec_and(vector signed char __a, vector signed char __b) {
883 return __a & __b;
884}
885
886static __inline__ vector signed char __ATTRS_o_ai
887vec_and(vector bool char __a, vector signed char __b) {
888 return (vector signed char)__a & __b;
889}
890
891static __inline__ vector signed char __ATTRS_o_ai
892vec_and(vector signed char __a, vector bool char __b) {
893 return __a & (vector signed char)__b;
894}
895
896static __inline__ vector unsigned char __ATTRS_o_ai
897vec_and(vector unsigned char __a, vector unsigned char __b) {
898 return __a & __b;
899}
900
901static __inline__ vector unsigned char __ATTRS_o_ai
902vec_and(vector bool char __a, vector unsigned char __b) {
903 return (vector unsigned char)__a & __b;
904}
905
906static __inline__ vector unsigned char __ATTRS_o_ai
907vec_and(vector unsigned char __a, vector bool char __b) {
908 return __a & (vector unsigned char)__b;
909}
910
911static __inline__ vector bool char __ATTRS_o_ai vec_and(vector bool char __a,
912 vector bool char __b) {
913 return __a & __b;
914}
915
916static __inline__ vector short __ATTRS_o_ai vec_and(vector short __a,
917 vector short __b) {
918 return __a & __b;
919}
920
921static __inline__ vector short __ATTRS_o_ai vec_and(vector bool short __a,
922 vector short __b) {
923 return (vector short)__a & __b;
924}
925
926static __inline__ vector short __ATTRS_o_ai vec_and(vector short __a,
927 vector bool short __b) {
928 return __a & (vector short)__b;
929}
930
931static __inline__ vector unsigned short __ATTRS_o_ai
932vec_and(vector unsigned short __a, vector unsigned short __b) {
933 return __a & __b;
934}
935
936static __inline__ vector unsigned short __ATTRS_o_ai
937vec_and(vector bool short __a, vector unsigned short __b) {
938 return (vector unsigned short)__a & __b;
939}
940
941static __inline__ vector unsigned short __ATTRS_o_ai
942vec_and(vector unsigned short __a, vector bool short __b) {
943 return __a & (vector unsigned short)__b;
944}
945
946static __inline__ vector bool short __ATTRS_o_ai
947vec_and(vector bool short __a, vector bool short __b) {
948 return __a & __b;
949}
950
951static __inline__ vector int __ATTRS_o_ai vec_and(vector int __a,
952 vector int __b) {
953 return __a & __b;
954}
955
956static __inline__ vector int __ATTRS_o_ai vec_and(vector bool int __a,
957 vector int __b) {
958 return (vector int)__a & __b;
959}
960
961static __inline__ vector int __ATTRS_o_ai vec_and(vector int __a,
962 vector bool int __b) {
963 return __a & (vector int)__b;
964}
965
966static __inline__ vector unsigned int __ATTRS_o_ai
967vec_and(vector unsigned int __a, vector unsigned int __b) {
968 return __a & __b;
969}
970
971static __inline__ vector unsigned int __ATTRS_o_ai
972vec_and(vector bool int __a, vector unsigned int __b) {
973 return (vector unsigned int)__a & __b;
974}
975
976static __inline__ vector unsigned int __ATTRS_o_ai
977vec_and(vector unsigned int __a, vector bool int __b) {
978 return __a & (vector unsigned int)__b;
979}
980
981static __inline__ vector bool int __ATTRS_o_ai vec_and(vector bool int __a,
982 vector bool int __b) {
983 return __a & __b;
984}
985
986static __inline__ vector float __ATTRS_o_ai vec_and(vector float __a,
987 vector float __b) {
988 vector unsigned int __res =
989 (vector unsigned int)__a & (vector unsigned int)__b;
990 return (vector float)__res;
991}
992
993static __inline__ vector float __ATTRS_o_ai vec_and(vector bool int __a,
994 vector float __b) {
995 vector unsigned int __res =
996 (vector unsigned int)__a & (vector unsigned int)__b;
997 return (vector float)__res;
998}
999
1000static __inline__ vector float __ATTRS_o_ai vec_and(vector float __a,
1001 vector bool int __b) {
1002 vector unsigned int __res =
1003 (vector unsigned int)__a & (vector unsigned int)__b;
1004 return (vector float)__res;
1005}
1006
1007#ifdef __VSX__
1008static __inline__ vector double __ATTRS_o_ai vec_and(vector bool long long __a,
1009 vector double __b) {
1010 vector unsigned long long __res =
1011 (vector unsigned long long)__a & (vector unsigned long long)__b;
1012 return (vector double)__res;
1013}
1014
1015static __inline__ vector double __ATTRS_o_ai
1016vec_and(vector double __a, vector bool long long __b) {
1017 vector unsigned long long __res =
1018 (vector unsigned long long)__a & (vector unsigned long long)__b;
1019 return (vector double)__res;
1020}
1021
1022static __inline__ vector double __ATTRS_o_ai vec_and(vector double __a,
1023 vector double __b) {
1024 vector unsigned long long __res =
1025 (vector unsigned long long)__a & (vector unsigned long long)__b;
1026 return (vector double)__res;
1027}
1028
1029static __inline__ vector signed long long __ATTRS_o_ai
1030vec_and(vector signed long long __a, vector signed long long __b) {
1031 return __a & __b;
1032}
1033
1034static __inline__ vector signed long long __ATTRS_o_ai
1035vec_and(vector bool long long __a, vector signed long long __b) {
1036 return (vector signed long long)__a & __b;
1037}
1038
1039static __inline__ vector signed long long __ATTRS_o_ai
1040vec_and(vector signed long long __a, vector bool long long __b) {
1041 return __a & (vector signed long long)__b;
1042}
1043
1044static __inline__ vector unsigned long long __ATTRS_o_ai
1045vec_and(vector unsigned long long __a, vector unsigned long long __b) {
1046 return __a & __b;
1047}
1048
1049static __inline__ vector unsigned long long __ATTRS_o_ai
1050vec_and(vector bool long long __a, vector unsigned long long __b) {
1051 return (vector unsigned long long)__a & __b;
1052}
1053
1054static __inline__ vector unsigned long long __ATTRS_o_ai
1055vec_and(vector unsigned long long __a, vector bool long long __b) {
1056 return __a & (vector unsigned long long)__b;
1057}
1058
1059static __inline__ vector bool long long __ATTRS_o_ai
1060vec_and(vector bool long long __a, vector bool long long __b) {
1061 return __a & __b;
1062}
1063#endif
1064
1065/* vec_vand */
1066
1067static __inline__ vector signed char __ATTRS_o_ai
1068vec_vand(vector signed char __a, vector signed char __b) {
1069 return __a & __b;
1070}
1071
1072static __inline__ vector signed char __ATTRS_o_ai
1073vec_vand(vector bool char __a, vector signed char __b) {
1074 return (vector signed char)__a & __b;
1075}
1076
1077static __inline__ vector signed char __ATTRS_o_ai
1078vec_vand(vector signed char __a, vector bool char __b) {
1079 return __a & (vector signed char)__b;
1080}
1081
1082static __inline__ vector unsigned char __ATTRS_o_ai
1083vec_vand(vector unsigned char __a, vector unsigned char __b) {
1084 return __a & __b;
1085}
1086
1087static __inline__ vector unsigned char __ATTRS_o_ai
1088vec_vand(vector bool char __a, vector unsigned char __b) {
1089 return (vector unsigned char)__a & __b;
1090}
1091
1092static __inline__ vector unsigned char __ATTRS_o_ai
1093vec_vand(vector unsigned char __a, vector bool char __b) {
1094 return __a & (vector unsigned char)__b;
1095}
1096
1097static __inline__ vector bool char __ATTRS_o_ai vec_vand(vector bool char __a,
1098 vector bool char __b) {
1099 return __a & __b;
1100}
1101
1102static __inline__ vector short __ATTRS_o_ai vec_vand(vector short __a,
1103 vector short __b) {
1104 return __a & __b;
1105}
1106
1107static __inline__ vector short __ATTRS_o_ai vec_vand(vector bool short __a,
1108 vector short __b) {
1109 return (vector short)__a & __b;
1110}
1111
1112static __inline__ vector short __ATTRS_o_ai vec_vand(vector short __a,
1113 vector bool short __b) {
1114 return __a & (vector short)__b;
1115}
1116
1117static __inline__ vector unsigned short __ATTRS_o_ai
1118vec_vand(vector unsigned short __a, vector unsigned short __b) {
1119 return __a & __b;
1120}
1121
1122static __inline__ vector unsigned short __ATTRS_o_ai
1123vec_vand(vector bool short __a, vector unsigned short __b) {
1124 return (vector unsigned short)__a & __b;
1125}
1126
1127static __inline__ vector unsigned short __ATTRS_o_ai
1128vec_vand(vector unsigned short __a, vector bool short __b) {
1129 return __a & (vector unsigned short)__b;
1130}
1131
1132static __inline__ vector bool short __ATTRS_o_ai
1133vec_vand(vector bool short __a, vector bool short __b) {
1134 return __a & __b;
1135}
1136
1137static __inline__ vector int __ATTRS_o_ai vec_vand(vector int __a,
1138 vector int __b) {
1139 return __a & __b;
1140}
1141
1142static __inline__ vector int __ATTRS_o_ai vec_vand(vector bool int __a,
1143 vector int __b) {
1144 return (vector int)__a & __b;
1145}
1146
1147static __inline__ vector int __ATTRS_o_ai vec_vand(vector int __a,
1148 vector bool int __b) {
1149 return __a & (vector int)__b;
1150}
1151
1152static __inline__ vector unsigned int __ATTRS_o_ai
1153vec_vand(vector unsigned int __a, vector unsigned int __b) {
1154 return __a & __b;
1155}
1156
1157static __inline__ vector unsigned int __ATTRS_o_ai
1158vec_vand(vector bool int __a, vector unsigned int __b) {
1159 return (vector unsigned int)__a & __b;
1160}
1161
1162static __inline__ vector unsigned int __ATTRS_o_ai
1163vec_vand(vector unsigned int __a, vector bool int __b) {
1164 return __a & (vector unsigned int)__b;
1165}
1166
1167static __inline__ vector bool int __ATTRS_o_ai vec_vand(vector bool int __a,
1168 vector bool int __b) {
1169 return __a & __b;
1170}
1171
1172static __inline__ vector float __ATTRS_o_ai vec_vand(vector float __a,
1173 vector float __b) {
1174 vector unsigned int __res =
1175 (vector unsigned int)__a & (vector unsigned int)__b;
1176 return (vector float)__res;
1177}
1178
1179static __inline__ vector float __ATTRS_o_ai vec_vand(vector bool int __a,
1180 vector float __b) {
1181 vector unsigned int __res =
1182 (vector unsigned int)__a & (vector unsigned int)__b;
1183 return (vector float)__res;
1184}
1185
1186static __inline__ vector float __ATTRS_o_ai vec_vand(vector float __a,
1187 vector bool int __b) {
1188 vector unsigned int __res =
1189 (vector unsigned int)__a & (vector unsigned int)__b;
1190 return (vector float)__res;
1191}
1192
1193#ifdef __VSX__
1194static __inline__ vector signed long long __ATTRS_o_ai
1195vec_vand(vector signed long long __a, vector signed long long __b) {
1196 return __a & __b;
1197}
1198
1199static __inline__ vector signed long long __ATTRS_o_ai
1200vec_vand(vector bool long long __a, vector signed long long __b) {
1201 return (vector signed long long)__a & __b;
1202}
1203
1204static __inline__ vector signed long long __ATTRS_o_ai
1205vec_vand(vector signed long long __a, vector bool long long __b) {
1206 return __a & (vector signed long long)__b;
1207}
1208
1209static __inline__ vector unsigned long long __ATTRS_o_ai
1210vec_vand(vector unsigned long long __a, vector unsigned long long __b) {
1211 return __a & __b;
1212}
1213
1214static __inline__ vector unsigned long long __ATTRS_o_ai
1215vec_vand(vector bool long long __a, vector unsigned long long __b) {
1216 return (vector unsigned long long)__a & __b;
1217}
1218
1219static __inline__ vector unsigned long long __ATTRS_o_ai
1220vec_vand(vector unsigned long long __a, vector bool long long __b) {
1221 return __a & (vector unsigned long long)__b;
1222}
1223
1224static __inline__ vector bool long long __ATTRS_o_ai
1225vec_vand(vector bool long long __a, vector bool long long __b) {
1226 return __a & __b;
1227}
1228#endif
1229
1230/* vec_andc */
1231
1232#define __builtin_altivec_vandc vec_andc
1233
1234static __inline__ vector signed char __ATTRS_o_ai
1235vec_andc(vector signed char __a, vector signed char __b) {
1236 return __a & ~__b;
1237}
1238
1239static __inline__ vector signed char __ATTRS_o_ai
1240vec_andc(vector bool char __a, vector signed char __b) {
1241 return (vector signed char)__a & ~__b;
1242}
1243
1244static __inline__ vector signed char __ATTRS_o_ai
1245vec_andc(vector signed char __a, vector bool char __b) {
1246 return __a & ~(vector signed char)__b;
1247}
1248
1249static __inline__ vector unsigned char __ATTRS_o_ai
1250vec_andc(vector unsigned char __a, vector unsigned char __b) {
1251 return __a & ~__b;
1252}
1253
1254static __inline__ vector unsigned char __ATTRS_o_ai
1255vec_andc(vector bool char __a, vector unsigned char __b) {
1256 return (vector unsigned char)__a & ~__b;
1257}
1258
1259static __inline__ vector unsigned char __ATTRS_o_ai
1260vec_andc(vector unsigned char __a, vector bool char __b) {
1261 return __a & ~(vector unsigned char)__b;
1262}
1263
1264static __inline__ vector bool char __ATTRS_o_ai vec_andc(vector bool char __a,
1265 vector bool char __b) {
1266 return __a & ~__b;
1267}
1268
1269static __inline__ vector short __ATTRS_o_ai vec_andc(vector short __a,
1270 vector short __b) {
1271 return __a & ~__b;
1272}
1273
1274static __inline__ vector short __ATTRS_o_ai vec_andc(vector bool short __a,
1275 vector short __b) {
1276 return (vector short)__a & ~__b;
1277}
1278
1279static __inline__ vector short __ATTRS_o_ai vec_andc(vector short __a,
1280 vector bool short __b) {
1281 return __a & ~(vector short)__b;
1282}
1283
1284static __inline__ vector unsigned short __ATTRS_o_ai
1285vec_andc(vector unsigned short __a, vector unsigned short __b) {
1286 return __a & ~__b;
1287}
1288
1289static __inline__ vector unsigned short __ATTRS_o_ai
1290vec_andc(vector bool short __a, vector unsigned short __b) {
1291 return (vector unsigned short)__a & ~__b;
1292}
1293
1294static __inline__ vector unsigned short __ATTRS_o_ai
1295vec_andc(vector unsigned short __a, vector bool short __b) {
1296 return __a & ~(vector unsigned short)__b;
1297}
1298
1299static __inline__ vector bool short __ATTRS_o_ai
1300vec_andc(vector bool short __a, vector bool short __b) {
1301 return __a & ~__b;
1302}
1303
1304static __inline__ vector int __ATTRS_o_ai vec_andc(vector int __a,
1305 vector int __b) {
1306 return __a & ~__b;
1307}
1308
1309static __inline__ vector int __ATTRS_o_ai vec_andc(vector bool int __a,
1310 vector int __b) {
1311 return (vector int)__a & ~__b;
1312}
1313
1314static __inline__ vector int __ATTRS_o_ai vec_andc(vector int __a,
1315 vector bool int __b) {
1316 return __a & ~(vector int)__b;
1317}
1318
1319static __inline__ vector unsigned int __ATTRS_o_ai
1320vec_andc(vector unsigned int __a, vector unsigned int __b) {
1321 return __a & ~__b;
1322}
1323
1324static __inline__ vector unsigned int __ATTRS_o_ai
1325vec_andc(vector bool int __a, vector unsigned int __b) {
1326 return (vector unsigned int)__a & ~__b;
1327}
1328
1329static __inline__ vector unsigned int __ATTRS_o_ai
1330vec_andc(vector unsigned int __a, vector bool int __b) {
1331 return __a & ~(vector unsigned int)__b;
1332}
1333
1334static __inline__ vector bool int __ATTRS_o_ai vec_andc(vector bool int __a,
1335 vector bool int __b) {
1336 return __a & ~__b;
1337}
1338
1339static __inline__ vector float __ATTRS_o_ai vec_andc(vector float __a,
1340 vector float __b) {
1341 vector unsigned int __res =
1342 (vector unsigned int)__a & ~(vector unsigned int)__b;
1343 return (vector float)__res;
1344}
1345
1346static __inline__ vector float __ATTRS_o_ai vec_andc(vector bool int __a,
1347 vector float __b) {
1348 vector unsigned int __res =
1349 (vector unsigned int)__a & ~(vector unsigned int)__b;
1350 return (vector float)__res;
1351}
1352
1353static __inline__ vector float __ATTRS_o_ai vec_andc(vector float __a,
1354 vector bool int __b) {
1355 vector unsigned int __res =
1356 (vector unsigned int)__a & ~(vector unsigned int)__b;
1357 return (vector float)__res;
1358}
1359
1360#ifdef __VSX__
1361static __inline__ vector double __ATTRS_o_ai vec_andc(vector bool long long __a,
1362 vector double __b) {
1363 vector unsigned long long __res =
1364 (vector unsigned long long)__a & ~(vector unsigned long long)__b;
1365 return (vector double)__res;
1366}
1367
1368static __inline__ vector double __ATTRS_o_ai
1369vec_andc(vector double __a, vector bool long long __b) {
1370 vector unsigned long long __res =
1371 (vector unsigned long long)__a & ~(vector unsigned long long)__b;
1372 return (vector double)__res;
1373}
1374
1375static __inline__ vector double __ATTRS_o_ai vec_andc(vector double __a,
1376 vector double __b) {
1377 vector unsigned long long __res =
1378 (vector unsigned long long)__a & ~(vector unsigned long long)__b;
1379 return (vector double)__res;
1380}
1381
1382static __inline__ vector signed long long __ATTRS_o_ai
1383vec_andc(vector signed long long __a, vector signed long long __b) {
1384 return __a & ~__b;
1385}
1386
1387static __inline__ vector signed long long __ATTRS_o_ai
1388vec_andc(vector bool long long __a, vector signed long long __b) {
1389 return (vector signed long long)__a & ~__b;
1390}
1391
1392static __inline__ vector signed long long __ATTRS_o_ai
1393vec_andc(vector signed long long __a, vector bool long long __b) {
1394 return __a & ~(vector signed long long)__b;
1395}
1396
1397static __inline__ vector unsigned long long __ATTRS_o_ai
1398vec_andc(vector unsigned long long __a, vector unsigned long long __b) {
1399 return __a & ~__b;
1400}
1401
1402static __inline__ vector unsigned long long __ATTRS_o_ai
1403vec_andc(vector bool long long __a, vector unsigned long long __b) {
1404 return (vector unsigned long long)__a & ~__b;
1405}
1406
1407static __inline__ vector unsigned long long __ATTRS_o_ai
1408vec_andc(vector unsigned long long __a, vector bool long long __b) {
1409 return __a & ~(vector unsigned long long)__b;
1410}
1411
1412static __inline__ vector bool long long __ATTRS_o_ai
1413vec_andc(vector bool long long __a, vector bool long long __b) {
1414 return __a & ~__b;
1415}
1416#endif
1417
1418/* vec_vandc */
1419
1420static __inline__ vector signed char __ATTRS_o_ai
1421vec_vandc(vector signed char __a, vector signed char __b) {
1422 return __a & ~__b;
1423}
1424
1425static __inline__ vector signed char __ATTRS_o_ai
1426vec_vandc(vector bool char __a, vector signed char __b) {
1427 return (vector signed char)__a & ~__b;
1428}
1429
1430static __inline__ vector signed char __ATTRS_o_ai
1431vec_vandc(vector signed char __a, vector bool char __b) {
1432 return __a & ~(vector signed char)__b;
1433}
1434
1435static __inline__ vector unsigned char __ATTRS_o_ai
1436vec_vandc(vector unsigned char __a, vector unsigned char __b) {
1437 return __a & ~__b;
1438}
1439
1440static __inline__ vector unsigned char __ATTRS_o_ai
1441vec_vandc(vector bool char __a, vector unsigned char __b) {
1442 return (vector unsigned char)__a & ~__b;
1443}
1444
1445static __inline__ vector unsigned char __ATTRS_o_ai
1446vec_vandc(vector unsigned char __a, vector bool char __b) {
1447 return __a & ~(vector unsigned char)__b;
1448}
1449
1450static __inline__ vector bool char __ATTRS_o_ai
1451vec_vandc(vector bool char __a, vector bool char __b) {
1452 return __a & ~__b;
1453}
1454
1455static __inline__ vector short __ATTRS_o_ai vec_vandc(vector short __a,
1456 vector short __b) {
1457 return __a & ~__b;
1458}
1459
1460static __inline__ vector short __ATTRS_o_ai vec_vandc(vector bool short __a,
1461 vector short __b) {
1462 return (vector short)__a & ~__b;
1463}
1464
1465static __inline__ vector short __ATTRS_o_ai vec_vandc(vector short __a,
1466 vector bool short __b) {
1467 return __a & ~(vector short)__b;
1468}
1469
1470static __inline__ vector unsigned short __ATTRS_o_ai
1471vec_vandc(vector unsigned short __a, vector unsigned short __b) {
1472 return __a & ~__b;
1473}
1474
1475static __inline__ vector unsigned short __ATTRS_o_ai
1476vec_vandc(vector bool short __a, vector unsigned short __b) {
1477 return (vector unsigned short)__a & ~__b;
1478}
1479
1480static __inline__ vector unsigned short __ATTRS_o_ai
1481vec_vandc(vector unsigned short __a, vector bool short __b) {
1482 return __a & ~(vector unsigned short)__b;
1483}
1484
1485static __inline__ vector bool short __ATTRS_o_ai
1486vec_vandc(vector bool short __a, vector bool short __b) {
1487 return __a & ~__b;
1488}
1489
1490static __inline__ vector int __ATTRS_o_ai vec_vandc(vector int __a,
1491 vector int __b) {
1492 return __a & ~__b;
1493}
1494
1495static __inline__ vector int __ATTRS_o_ai vec_vandc(vector bool int __a,
1496 vector int __b) {
1497 return (vector int)__a & ~__b;
1498}
1499
1500static __inline__ vector int __ATTRS_o_ai vec_vandc(vector int __a,
1501 vector bool int __b) {
1502 return __a & ~(vector int)__b;
1503}
1504
1505static __inline__ vector unsigned int __ATTRS_o_ai
1506vec_vandc(vector unsigned int __a, vector unsigned int __b) {
1507 return __a & ~__b;
1508}
1509
1510static __inline__ vector unsigned int __ATTRS_o_ai
1511vec_vandc(vector bool int __a, vector unsigned int __b) {
1512 return (vector unsigned int)__a & ~__b;
1513}
1514
1515static __inline__ vector unsigned int __ATTRS_o_ai
1516vec_vandc(vector unsigned int __a, vector bool int __b) {
1517 return __a & ~(vector unsigned int)__b;
1518}
1519
1520static __inline__ vector bool int __ATTRS_o_ai vec_vandc(vector bool int __a,
1521 vector bool int __b) {
1522 return __a & ~__b;
1523}
1524
1525static __inline__ vector float __ATTRS_o_ai vec_vandc(vector float __a,
1526 vector float __b) {
1527 vector unsigned int __res =
1528 (vector unsigned int)__a & ~(vector unsigned int)__b;
1529 return (vector float)__res;
1530}
1531
1532static __inline__ vector float __ATTRS_o_ai vec_vandc(vector bool int __a,
1533 vector float __b) {
1534 vector unsigned int __res =
1535 (vector unsigned int)__a & ~(vector unsigned int)__b;
1536 return (vector float)__res;
1537}
1538
1539static __inline__ vector float __ATTRS_o_ai vec_vandc(vector float __a,
1540 vector bool int __b) {
1541 vector unsigned int __res =
1542 (vector unsigned int)__a & ~(vector unsigned int)__b;
1543 return (vector float)__res;
1544}
1545
1546#ifdef __VSX__
1547static __inline__ vector signed long long __ATTRS_o_ai
1548vec_vandc(vector signed long long __a, vector signed long long __b) {
1549 return __a & ~__b;
1550}
1551
1552static __inline__ vector signed long long __ATTRS_o_ai
1553vec_vandc(vector bool long long __a, vector signed long long __b) {
1554 return (vector signed long long)__a & ~__b;
1555}
1556
1557static __inline__ vector signed long long __ATTRS_o_ai
1558vec_vandc(vector signed long long __a, vector bool long long __b) {
1559 return __a & ~(vector signed long long)__b;
1560}
1561
1562static __inline__ vector unsigned long long __ATTRS_o_ai
1563vec_vandc(vector unsigned long long __a, vector unsigned long long __b) {
1564 return __a & ~__b;
1565}
1566
1567static __inline__ vector unsigned long long __ATTRS_o_ai
1568vec_vandc(vector bool long long __a, vector unsigned long long __b) {
1569 return (vector unsigned long long)__a & ~__b;
1570}
1571
1572static __inline__ vector unsigned long long __ATTRS_o_ai
1573vec_vandc(vector unsigned long long __a, vector bool long long __b) {
1574 return __a & ~(vector unsigned long long)__b;
1575}
1576
1577static __inline__ vector bool long long __ATTRS_o_ai
1578vec_vandc(vector bool long long __a, vector bool long long __b) {
1579 return __a & ~__b;
1580}
1581#endif
1582
1583/* vec_avg */
1584
1585static __inline__ vector signed char __ATTRS_o_ai
1586vec_avg(vector signed char __a, vector signed char __b) {
1587 return __builtin_altivec_vavgsb(__a, __b);
1588}
1589
1590static __inline__ vector unsigned char __ATTRS_o_ai
1591vec_avg(vector unsigned char __a, vector unsigned char __b) {
1592 return __builtin_altivec_vavgub(__a, __b);
1593}
1594
1595static __inline__ vector short __ATTRS_o_ai vec_avg(vector short __a,
1596 vector short __b) {
1597 return __builtin_altivec_vavgsh(__a, __b);
1598}
1599
1600static __inline__ vector unsigned short __ATTRS_o_ai
1601vec_avg(vector unsigned short __a, vector unsigned short __b) {
1602 return __builtin_altivec_vavguh(__a, __b);
1603}
1604
1605static __inline__ vector int __ATTRS_o_ai vec_avg(vector int __a,
1606 vector int __b) {
1607 return __builtin_altivec_vavgsw(__a, __b);
1608}
1609
1610static __inline__ vector unsigned int __ATTRS_o_ai
1611vec_avg(vector unsigned int __a, vector unsigned int __b) {
1612 return __builtin_altivec_vavguw(__a, __b);
1613}
1614
1615/* vec_vavgsb */
1616
1617static __inline__ vector signed char __attribute__((__always_inline__))
1618vec_vavgsb(vector signed char __a, vector signed char __b) {
1619 return __builtin_altivec_vavgsb(__a, __b);
1620}
1621
1622/* vec_vavgub */
1623
1624static __inline__ vector unsigned char __attribute__((__always_inline__))
1625vec_vavgub(vector unsigned char __a, vector unsigned char __b) {
1626 return __builtin_altivec_vavgub(__a, __b);
1627}
1628
1629/* vec_vavgsh */
1630
1631static __inline__ vector short __attribute__((__always_inline__))
1632vec_vavgsh(vector short __a, vector short __b) {
1633 return __builtin_altivec_vavgsh(__a, __b);
1634}
1635
1636/* vec_vavguh */
1637
1638static __inline__ vector unsigned short __attribute__((__always_inline__))
1639vec_vavguh(vector unsigned short __a, vector unsigned short __b) {
1640 return __builtin_altivec_vavguh(__a, __b);
1641}
1642
1643/* vec_vavgsw */
1644
1645static __inline__ vector int __attribute__((__always_inline__))
1646vec_vavgsw(vector int __a, vector int __b) {
1647 return __builtin_altivec_vavgsw(__a, __b);
1648}
1649
1650/* vec_vavguw */
1651
1652static __inline__ vector unsigned int __attribute__((__always_inline__))
1653vec_vavguw(vector unsigned int __a, vector unsigned int __b) {
1654 return __builtin_altivec_vavguw(__a, __b);
1655}
1656
1657/* vec_ceil */
1658
1659static __inline__ vector float __ATTRS_o_ai vec_ceil(vector float __a) {
1660#ifdef __VSX__
1661 return __builtin_vsx_xvrspip(__a);
1662#else
1663 return __builtin_altivec_vrfip(__a);
1664#endif
1665}
1666
1667#ifdef __VSX__
1668static __inline__ vector double __ATTRS_o_ai vec_ceil(vector double __a) {
1669 return __builtin_vsx_xvrdpip(__a);
1670}
1671#endif
1672
1673/* vec_roundp */
1674static __inline__ vector float __ATTRS_o_ai vec_roundp(vector float __a) {
1675 return vec_ceil(__a);
1676}
1677
1678#ifdef __VSX__
1679static __inline__ vector double __ATTRS_o_ai vec_roundp(vector double __a) {
1680 return vec_ceil(__a);
1681}
1682#endif
1683
1684/* vec_vrfip */
1685
1686static __inline__ vector float __attribute__((__always_inline__))
1687vec_vrfip(vector float __a) {
1688 return __builtin_altivec_vrfip(__a);
1689}
1690
1691/* vec_cmpb */
1692
1693static __inline__ vector int __attribute__((__always_inline__))
1694vec_cmpb(vector float __a, vector float __b) {
1695 return __builtin_altivec_vcmpbfp(__a, __b);
1696}
1697
1698/* vec_vcmpbfp */
1699
1700static __inline__ vector int __attribute__((__always_inline__))
1701vec_vcmpbfp(vector float __a, vector float __b) {
1702 return __builtin_altivec_vcmpbfp(__a, __b);
1703}
1704
1705/* vec_cmpeq */
1706
1707static __inline__ vector bool char __ATTRS_o_ai
1708vec_cmpeq(vector signed char __a, vector signed char __b) {
1709 return (vector bool char)__builtin_altivec_vcmpequb((vector char)__a,
1710 (vector char)__b);
1711}
1712
1713static __inline__ vector bool char __ATTRS_o_ai
1714vec_cmpeq(vector unsigned char __a, vector unsigned char __b) {
1715 return (vector bool char)__builtin_altivec_vcmpequb((vector char)__a,
1716 (vector char)__b);
1717}
1718
1719static __inline__ vector bool char __ATTRS_o_ai
1720vec_cmpeq(vector bool char __a, vector bool char __b) {
1721 return (vector bool char)__builtin_altivec_vcmpequb((vector char)__a,
1722 (vector char)__b);
1723}
1724
1725static __inline__ vector bool short __ATTRS_o_ai vec_cmpeq(vector short __a,
1726 vector short __b) {
1727 return (vector bool short)__builtin_altivec_vcmpequh(__a, __b);
1728}
1729
1730static __inline__ vector bool short __ATTRS_o_ai
1731vec_cmpeq(vector unsigned short __a, vector unsigned short __b) {
1732 return (vector bool short)__builtin_altivec_vcmpequh((vector short)__a,
1733 (vector short)__b);
1734}
1735
1736static __inline__ vector bool short __ATTRS_o_ai
1737vec_cmpeq(vector bool short __a, vector bool short __b) {
1738 return (vector bool short)__builtin_altivec_vcmpequh((vector short)__a,
1739 (vector short)__b);
1740}
1741
1742static __inline__ vector bool int __ATTRS_o_ai vec_cmpeq(vector int __a,
1743 vector int __b) {
1744 return (vector bool int)__builtin_altivec_vcmpequw(__a, __b);
1745}
1746
1747static __inline__ vector bool int __ATTRS_o_ai
1748vec_cmpeq(vector unsigned int __a, vector unsigned int __b) {
1749 return (vector bool int)__builtin_altivec_vcmpequw((vector int)__a,
1750 (vector int)__b);
1751}
1752
1753static __inline__ vector bool int __ATTRS_o_ai vec_cmpeq(vector bool int __a,
1754 vector bool int __b) {
1755 return (vector bool int)__builtin_altivec_vcmpequw((vector int)__a,
1756 (vector int)__b);
1757}
1758
1759#ifdef __POWER8_VECTOR__
1760static __inline__ vector bool long long __ATTRS_o_ai
1761vec_cmpeq(vector signed long long __a, vector signed long long __b) {
1762 return (vector bool long long)__builtin_altivec_vcmpequd(__a, __b);
1763}
1764
1765static __inline__ vector bool long long __ATTRS_o_ai
1766vec_cmpeq(vector unsigned long long __a, vector unsigned long long __b) {
1767 return (vector bool long long)__builtin_altivec_vcmpequd(
1768 (vector long long)__a, (vector long long)__b);
1769}
1770
1771static __inline__ vector bool long long __ATTRS_o_ai
1772vec_cmpeq(vector bool long long __a, vector bool long long __b) {
1773 return (vector bool long long)__builtin_altivec_vcmpequd(
1774 (vector long long)__a, (vector long long)__b);
1775}
1776#elif defined(__VSX__)
1777static __inline__ vector bool long long __ATTRS_o_ai
1778vec_cmpeq(vector signed long long __a, vector signed long long __b) {
1779 vector bool int __wordcmp =
1780 vec_cmpeq((vector signed int)__a, (vector signed int)__b);
1781#ifdef __LITTLE_ENDIAN__
1782 __wordcmp &= __builtin_shufflevector(__wordcmp, __wordcmp, 3, 0, 1, 2);
1783 return (vector bool long long)__builtin_shufflevector(__wordcmp, __wordcmp, 1,
1784 1, 3, 3);
1785#else
1786 __wordcmp &= __builtin_shufflevector(__wordcmp, __wordcmp, 1, 2, 3, 0);
1787 return (vector bool long long)__builtin_shufflevector(__wordcmp, __wordcmp, 0,
1788 0, 2, 2);
1789#endif
1790}
1791
1792static __inline__ vector bool long long __ATTRS_o_ai
1793vec_cmpeq(vector unsigned long long __a, vector unsigned long long __b) {
1794 return vec_cmpeq((vector signed long long)__a, (vector signed long long)__b);
1795}
1796
1797static __inline__ vector bool long long __ATTRS_o_ai
1798vec_cmpeq(vector bool long long __a, vector bool long long __b) {
1799 return vec_cmpeq((vector signed long long)__a, (vector signed long long)__b);
1800}
1801#endif
1802
1803static __inline__ vector bool int __ATTRS_o_ai vec_cmpeq(vector float __a,
1804 vector float __b) {
1805#ifdef __VSX__
1806 return (vector bool int)__builtin_vsx_xvcmpeqsp(__a, __b);
1807#else
1808 return (vector bool int)__builtin_altivec_vcmpeqfp(__a, __b);
1809#endif
1810}
1811
1812#ifdef __VSX__
1813static __inline__ vector bool long long __ATTRS_o_ai
1814vec_cmpeq(vector double __a, vector double __b) {
1815 return (vector bool long long)__builtin_vsx_xvcmpeqdp(__a, __b);
1816}
1817#endif
1818
1819#if defined(__POWER10_VECTOR__) && defined(__SIZEOF_INT128__)
1820static __inline__ vector bool __int128 __ATTRS_o_ai
1821vec_cmpeq(vector signed __int128 __a, vector signed __int128 __b) {
1822 return (vector bool __int128)__builtin_altivec_vcmpequq(
1823 (vector unsigned __int128)__a, (vector unsigned __int128)__b);
1824}
1825
1826static __inline__ vector bool __int128 __ATTRS_o_ai
1827vec_cmpeq(vector unsigned __int128 __a, vector unsigned __int128 __b) {
1828 return (vector bool __int128)__builtin_altivec_vcmpequq(
1829 (vector unsigned __int128)__a, (vector unsigned __int128)__b);
1830}
1831
1832static __inline__ vector bool __int128 __ATTRS_o_ai
1833vec_cmpeq(vector bool __int128 __a, vector bool __int128 __b) {
1834 return (vector bool __int128)__builtin_altivec_vcmpequq(
1835 (vector unsigned __int128)__a, (vector unsigned __int128)__b);
1836}
1837#endif
1838
1839#ifdef __POWER9_VECTOR__
1840/* vec_cmpne */
1841
1842static __inline__ vector bool char __ATTRS_o_ai
1843vec_cmpne(vector bool char __a, vector bool char __b) {
1844 return (vector bool char)__builtin_altivec_vcmpneb((vector char)__a,
1845 (vector char)__b);
1846}
1847
1848static __inline__ vector bool char __ATTRS_o_ai
1849vec_cmpne(vector signed char __a, vector signed char __b) {
1850 return (vector bool char)__builtin_altivec_vcmpneb((vector char)__a,
1851 (vector char)__b);
1852}
1853
1854static __inline__ vector bool char __ATTRS_o_ai
1855vec_cmpne(vector unsigned char __a, vector unsigned char __b) {
1856 return (vector bool char)__builtin_altivec_vcmpneb((vector char)__a,
1857 (vector char)__b);
1858}
1859
1860static __inline__ vector bool short __ATTRS_o_ai
1861vec_cmpne(vector bool short __a, vector bool short __b) {
1862 return (vector bool short)__builtin_altivec_vcmpneh((vector short)__a,
1863 (vector short)__b);
1864}
1865
1866static __inline__ vector bool short __ATTRS_o_ai
1867vec_cmpne(vector signed short __a, vector signed short __b) {
1868 return (vector bool short)__builtin_altivec_vcmpneh((vector short)__a,
1869 (vector short)__b);
1870}
1871
1872static __inline__ vector bool short __ATTRS_o_ai
1873vec_cmpne(vector unsigned short __a, vector unsigned short __b) {
1874 return (vector bool short)__builtin_altivec_vcmpneh((vector short)__a,
1875 (vector short)__b);
1876}
1877
1878static __inline__ vector bool int __ATTRS_o_ai
1879vec_cmpne(vector bool int __a, vector bool int __b) {
1880 return (vector bool int)__builtin_altivec_vcmpnew((vector int)__a,
1881 (vector int)__b);
1882}
1883
1884static __inline__ vector bool int __ATTRS_o_ai
1885vec_cmpne(vector signed int __a, vector signed int __b) {
1886 return (vector bool int)__builtin_altivec_vcmpnew((vector int)__a,
1887 (vector int)__b);
1888}
1889
1890static __inline__ vector bool int __ATTRS_o_ai
1891vec_cmpne(vector unsigned int __a, vector unsigned int __b) {
1892 return (vector bool int)__builtin_altivec_vcmpnew((vector int)__a,
1893 (vector int)__b);
1894}
1895
1896static __inline__ vector bool int __ATTRS_o_ai
1897vec_cmpne(vector float __a, vector float __b) {
1898 return (vector bool int)__builtin_altivec_vcmpnew((vector int)__a,
1899 (vector int)__b);
1900}
1901
1902#if defined(__POWER10_VECTOR__) && defined(__SIZEOF_INT128__)
1903static __inline__ vector bool __int128 __ATTRS_o_ai
1904vec_cmpne(vector unsigned __int128 __a, vector unsigned __int128 __b) {
1905 return (vector bool __int128)~(__builtin_altivec_vcmpequq(
1906 (vector unsigned __int128)__a, (vector unsigned __int128)__b));
1907}
1908
1909static __inline__ vector bool __int128 __ATTRS_o_ai
1910vec_cmpne(vector signed __int128 __a, vector signed __int128 __b) {
1911 return (vector bool __int128)~(__builtin_altivec_vcmpequq(
1912 (vector unsigned __int128)__a, (vector unsigned __int128)__b));
1913}
1914
1915static __inline__ vector bool __int128 __ATTRS_o_ai
1916vec_cmpne(vector bool __int128 __a, vector bool __int128 __b) {
1917 return (vector bool __int128)~(__builtin_altivec_vcmpequq(
1918 (vector unsigned __int128)__a, (vector unsigned __int128)__b));
1919}
1920#endif
1921
1922/* vec_cmpnez */
1923
1924static __inline__ vector bool char __ATTRS_o_ai
1925vec_cmpnez(vector signed char __a, vector signed char __b) {
1926 return (vector bool char)__builtin_altivec_vcmpnezb((vector char)__a,
1927 (vector char)__b);
1928}
1929
1930static __inline__ vector bool char __ATTRS_o_ai
1931vec_cmpnez(vector unsigned char __a, vector unsigned char __b) {
1932 return (vector bool char)__builtin_altivec_vcmpnezb((vector char)__a,
1933 (vector char)__b);
1934}
1935
1936static __inline__ vector bool short __ATTRS_o_ai
1937vec_cmpnez(vector signed short __a, vector signed short __b) {
1938 return (vector bool short)__builtin_altivec_vcmpnezh((vector short)__a,
1939 (vector short)__b);
1940}
1941
1942static __inline__ vector bool short __ATTRS_o_ai
1943vec_cmpnez(vector unsigned short __a, vector unsigned short __b) {
1944 return (vector bool short)__builtin_altivec_vcmpnezh((vector short)__a,
1945 (vector short)__b);
1946}
1947
1948static __inline__ vector bool int __ATTRS_o_ai
1949vec_cmpnez(vector signed int __a, vector signed int __b) {
1950 return (vector bool int)__builtin_altivec_vcmpnezw((vector int)__a,
1951 (vector int)__b);
1952}
1953
1954static __inline__ vector bool int __ATTRS_o_ai
1955vec_cmpnez(vector unsigned int __a, vector unsigned int __b) {
1956 return (vector bool int)__builtin_altivec_vcmpnezw((vector int)__a,
1957 (vector int)__b);
1958}
1959
1960static __inline__ signed int __ATTRS_o_ai
1961vec_cntlz_lsbb(vector signed char __a) {
1962#ifdef __LITTLE_ENDIAN__
1963 return __builtin_altivec_vctzlsbb((vector unsigned char)__a);
1964#else
1965 return __builtin_altivec_vclzlsbb((vector unsigned char)__a);
1966#endif
1967}
1968
1969static __inline__ signed int __ATTRS_o_ai
1970vec_cntlz_lsbb(vector unsigned char __a) {
1971#ifdef __LITTLE_ENDIAN__
1972 return __builtin_altivec_vctzlsbb((vector unsigned char)__a);
1973#else
1974 return __builtin_altivec_vclzlsbb(__a);
1975#endif
1976}
1977
1978static __inline__ signed int __ATTRS_o_ai
1979vec_cnttz_lsbb(vector signed char __a) {
1980#ifdef __LITTLE_ENDIAN__
1981 return __builtin_altivec_vclzlsbb((vector unsigned char)__a);
1982#else
1983 return __builtin_altivec_vctzlsbb((vector unsigned char)__a);
1984#endif
1985}
1986
1987static __inline__ signed int __ATTRS_o_ai
1988vec_cnttz_lsbb(vector unsigned char __a) {
1989#ifdef __LITTLE_ENDIAN__
1990 return __builtin_altivec_vclzlsbb(__a);
1991#else
1992 return __builtin_altivec_vctzlsbb(__a);
1993#endif
1994}
1995
1996static __inline__ vector unsigned int __ATTRS_o_ai
1997vec_parity_lsbb(vector unsigned int __a) {
1998 return __builtin_altivec_vprtybw(__a);
1999}
2000
2001static __inline__ vector unsigned int __ATTRS_o_ai
2002vec_parity_lsbb(vector signed int __a) {
2003 return __builtin_altivec_vprtybw((vector unsigned int)__a);
2004}
2005
2006#ifdef __SIZEOF_INT128__
2007static __inline__ vector unsigned __int128 __ATTRS_o_ai
2008vec_parity_lsbb(vector unsigned __int128 __a) {
2009 return __builtin_altivec_vprtybq(__a);
2010}
2011
2012static __inline__ vector unsigned __int128 __ATTRS_o_ai
2013vec_parity_lsbb(vector signed __int128 __a) {
2014 return __builtin_altivec_vprtybq((vector unsigned __int128)__a);
2015}
2016#endif
2017
2018static __inline__ vector unsigned long long __ATTRS_o_ai
2019vec_parity_lsbb(vector unsigned long long __a) {
2020 return __builtin_altivec_vprtybd(__a);
2021}
2022
2023static __inline__ vector unsigned long long __ATTRS_o_ai
2024vec_parity_lsbb(vector signed long long __a) {
2025 return __builtin_altivec_vprtybd((vector unsigned long long)__a);
2026}
2027
2028#else
2029/* vec_cmpne */
2030
2031static __inline__ vector bool char __ATTRS_o_ai
2032vec_cmpne(vector bool char __a, vector bool char __b) {
2033 return ~(vec_cmpeq(__a, __b));
2034}
2035
2036static __inline__ vector bool char __ATTRS_o_ai
2037vec_cmpne(vector signed char __a, vector signed char __b) {
2038 return ~(vec_cmpeq(__a, __b));
2039}
2040
2041static __inline__ vector bool char __ATTRS_o_ai
2042vec_cmpne(vector unsigned char __a, vector unsigned char __b) {
2043 return ~(vec_cmpeq(__a, __b));
2044}
2045
2046static __inline__ vector bool short __ATTRS_o_ai
2047vec_cmpne(vector bool short __a, vector bool short __b) {
2048 return ~(vec_cmpeq(__a, __b));
2049}
2050
2051static __inline__ vector bool short __ATTRS_o_ai
2052vec_cmpne(vector signed short __a, vector signed short __b) {
2053 return ~(vec_cmpeq(__a, __b));
2054}
2055
2056static __inline__ vector bool short __ATTRS_o_ai
2057vec_cmpne(vector unsigned short __a, vector unsigned short __b) {
2058 return ~(vec_cmpeq(__a, __b));
2059}
2060
2061static __inline__ vector bool int __ATTRS_o_ai
2062vec_cmpne(vector bool int __a, vector bool int __b) {
2063 return ~(vec_cmpeq(__a, __b));
2064}
2065
2066static __inline__ vector bool int __ATTRS_o_ai
2067vec_cmpne(vector signed int __a, vector signed int __b) {
2068 return ~(vec_cmpeq(__a, __b));
2069}
2070
2071static __inline__ vector bool int __ATTRS_o_ai
2072vec_cmpne(vector unsigned int __a, vector unsigned int __b) {
2073 return ~(vec_cmpeq(__a, __b));
2074}
2075
2076static __inline__ vector bool int __ATTRS_o_ai
2077vec_cmpne(vector float __a, vector float __b) {
2078 return ~(vec_cmpeq(__a, __b));
2079}
2080#endif
2081
2082#ifdef __POWER8_VECTOR__
2083static __inline__ vector bool long long __ATTRS_o_ai
2084vec_cmpne(vector bool long long __a, vector bool long long __b) {
2085 return (vector bool long long)
2086 ~(__builtin_altivec_vcmpequd((vector long long)__a, (vector long long)__b));
2087}
2088
2089static __inline__ vector bool long long __ATTRS_o_ai
2090vec_cmpne(vector signed long long __a, vector signed long long __b) {
2091 return (vector bool long long)
2092 ~(__builtin_altivec_vcmpequd((vector long long)__a, (vector long long)__b));
2093}
2094
2095static __inline__ vector bool long long __ATTRS_o_ai
2096vec_cmpne(vector unsigned long long __a, vector unsigned long long __b) {
2097 return (vector bool long long)
2098 ~(__builtin_altivec_vcmpequd((vector long long)__a, (vector long long)__b));
2099}
2100#elif defined(__VSX__)
2101static __inline__ vector bool long long __ATTRS_o_ai
2102vec_cmpne(vector bool long long __a, vector bool long long __b) {
2103 return (vector bool long long)~(
2104 vec_cmpeq((vector signed long long)__a, (vector signed long long)__b));
2105}
2106
2107static __inline__ vector bool long long __ATTRS_o_ai
2108vec_cmpne(vector signed long long __a, vector signed long long __b) {
2109 return (vector bool long long)~(
2110 vec_cmpeq((vector signed long long)__a, (vector signed long long)__b));
2111}
2112
2113static __inline__ vector bool long long __ATTRS_o_ai
2114vec_cmpne(vector unsigned long long __a, vector unsigned long long __b) {
2115 return (vector bool long long)~(
2116 vec_cmpeq((vector signed long long)__a, (vector signed long long)__b));
2117}
2118#endif
2119
2120#ifdef __VSX__
2121static __inline__ vector bool long long __ATTRS_o_ai
2122vec_cmpne(vector double __a, vector double __b) {
2123 return (vector bool long long)
2124 ~(__builtin_altivec_vcmpequd((vector long long)__a, (vector long long)__b));
2125}
2126#endif
2127
2128/* vec_cmpgt */
2129
2130static __inline__ vector bool char __ATTRS_o_ai
2131vec_cmpgt(vector signed char __a, vector signed char __b) {
2132 return (vector bool char)__builtin_altivec_vcmpgtsb(__a, __b);
2133}
2134
2135static __inline__ vector bool char __ATTRS_o_ai
2136vec_cmpgt(vector unsigned char __a, vector unsigned char __b) {
2137 return (vector bool char)__builtin_altivec_vcmpgtub(__a, __b);
2138}
2139
2140static __inline__ vector bool short __ATTRS_o_ai vec_cmpgt(vector short __a,
2141 vector short __b) {
2142 return (vector bool short)__builtin_altivec_vcmpgtsh(__a, __b);
2143}
2144
2145static __inline__ vector bool short __ATTRS_o_ai
2146vec_cmpgt(vector unsigned short __a, vector unsigned short __b) {
2147 return (vector bool short)__builtin_altivec_vcmpgtuh(__a, __b);
2148}
2149
2150static __inline__ vector bool int __ATTRS_o_ai vec_cmpgt(vector int __a,
2151 vector int __b) {
2152 return (vector bool int)__builtin_altivec_vcmpgtsw(__a, __b);
2153}
2154
2155static __inline__ vector bool int __ATTRS_o_ai
2156vec_cmpgt(vector unsigned int __a, vector unsigned int __b) {
2157 return (vector bool int)__builtin_altivec_vcmpgtuw(__a, __b);
2158}
2159
2160#ifdef __POWER8_VECTOR__
2161static __inline__ vector bool long long __ATTRS_o_ai
2162vec_cmpgt(vector signed long long __a, vector signed long long __b) {
2163 return (vector bool long long)__builtin_altivec_vcmpgtsd(__a, __b);
2164}
2165
2166static __inline__ vector bool long long __ATTRS_o_ai
2167vec_cmpgt(vector unsigned long long __a, vector unsigned long long __b) {
2168 return (vector bool long long)__builtin_altivec_vcmpgtud(__a, __b);
2169}
2170#elif defined(__VSX__)
2171static __inline__ vector bool long long __ATTRS_o_ai
2172vec_cmpgt(vector signed long long __a, vector signed long long __b) {
2173 vector signed int __sgtw = (vector signed int)vec_cmpgt(
2174 (vector signed int)__a, (vector signed int)__b);
2175 vector unsigned int __ugtw = (vector unsigned int)vec_cmpgt(
2176 (vector unsigned int)__a, (vector unsigned int)__b);
2177 vector unsigned int __eqw = (vector unsigned int)vec_cmpeq(
2178 (vector signed int)__a, (vector signed int)__b);
2179#ifdef __LITTLE_ENDIAN__
2180 __ugtw = __builtin_shufflevector(__ugtw, __ugtw, 3, 0, 1, 2) & __eqw;
2181 __sgtw |= (vector signed int)__ugtw;
2182 return (vector bool long long)__builtin_shufflevector(__sgtw, __sgtw, 1, 1, 3,
2183 3);
2184#else
2185 __ugtw = __builtin_shufflevector(__ugtw, __ugtw, 1, 2, 3, 0) & __eqw;
2186 __sgtw |= (vector signed int)__ugtw;
2187 return (vector bool long long)__builtin_shufflevector(__sgtw, __sgtw, 0, 0, 2,
2188 2);
2189#endif
2190}
2191
2192static __inline__ vector bool long long __ATTRS_o_ai
2193vec_cmpgt(vector unsigned long long __a, vector unsigned long long __b) {
2194 vector unsigned int __ugtw = (vector unsigned int)vec_cmpgt(
2195 (vector unsigned int)__a, (vector unsigned int)__b);
2196 vector unsigned int __eqw = (vector unsigned int)vec_cmpeq(
2197 (vector signed int)__a, (vector signed int)__b);
2198#ifdef __LITTLE_ENDIAN__
2199 __eqw = __builtin_shufflevector(__ugtw, __ugtw, 3, 0, 1, 2) & __eqw;
2200 __ugtw |= __eqw;
2201 return (vector bool long long)__builtin_shufflevector(__ugtw, __ugtw, 1, 1, 3,
2202 3);
2203#else
2204 __eqw = __builtin_shufflevector(__ugtw, __ugtw, 1, 2, 3, 0) & __eqw;
2205 __ugtw |= __eqw;
2206 return (vector bool long long)__builtin_shufflevector(__ugtw, __ugtw, 0, 0, 2,
2207 2);
2208#endif
2209}
2210#endif
2211
2212static __inline__ vector bool int __ATTRS_o_ai vec_cmpgt(vector float __a,
2213 vector float __b) {
2214#ifdef __VSX__
2215 return (vector bool int)__builtin_vsx_xvcmpgtsp(__a, __b);
2216#else
2217 return (vector bool int)__builtin_altivec_vcmpgtfp(__a, __b);
2218#endif
2219}
2220
2221#ifdef __VSX__
2222static __inline__ vector bool long long __ATTRS_o_ai
2223vec_cmpgt(vector double __a, vector double __b) {
2224 return (vector bool long long)__builtin_vsx_xvcmpgtdp(__a, __b);
2225}
2226#endif
2227
2228#if defined(__POWER10_VECTOR__) && defined(__SIZEOF_INT128__)
2229static __inline__ vector bool __int128 __ATTRS_o_ai
2230vec_cmpgt(vector signed __int128 __a, vector signed __int128 __b) {
2231 return (vector bool __int128)__builtin_altivec_vcmpgtsq(__a, __b);
2232}
2233
2234static __inline__ vector bool __int128 __ATTRS_o_ai
2235vec_cmpgt(vector unsigned __int128 __a, vector unsigned __int128 __b) {
2236 return (vector bool __int128)__builtin_altivec_vcmpgtuq(__a, __b);
2237}
2238#endif
2239
2240/* vec_cmpge */
2241
2242static __inline__ vector bool char __ATTRS_o_ai
2243vec_cmpge(vector signed char __a, vector signed char __b) {
2244 return ~(vec_cmpgt(__b, __a));
2245}
2246
2247static __inline__ vector bool char __ATTRS_o_ai
2248vec_cmpge(vector unsigned char __a, vector unsigned char __b) {
2249 return ~(vec_cmpgt(__b, __a));
2250}
2251
2252static __inline__ vector bool short __ATTRS_o_ai
2253vec_cmpge(vector signed short __a, vector signed short __b) {
2254 return ~(vec_cmpgt(__b, __a));
2255}
2256
2257static __inline__ vector bool short __ATTRS_o_ai
2258vec_cmpge(vector unsigned short __a, vector unsigned short __b) {
2259 return ~(vec_cmpgt(__b, __a));
2260}
2261
2262static __inline__ vector bool int __ATTRS_o_ai
2263vec_cmpge(vector signed int __a, vector signed int __b) {
2264 return ~(vec_cmpgt(__b, __a));
2265}
2266
2267static __inline__ vector bool int __ATTRS_o_ai
2268vec_cmpge(vector unsigned int __a, vector unsigned int __b) {
2269 return ~(vec_cmpgt(__b, __a));
2270}
2271
2272static __inline__ vector bool int __ATTRS_o_ai vec_cmpge(vector float __a,
2273 vector float __b) {
2274#ifdef __VSX__
2275 return (vector bool int)__builtin_vsx_xvcmpgesp(__a, __b);
2276#else
2277 return (vector bool int)__builtin_altivec_vcmpgefp(__a, __b);
2278#endif
2279}
2280
2281#ifdef __VSX__
2282static __inline__ vector bool long long __ATTRS_o_ai
2283vec_cmpge(vector double __a, vector double __b) {
2284 return (vector bool long long)__builtin_vsx_xvcmpgedp(__a, __b);
2285}
2286
2287static __inline__ vector bool long long __ATTRS_o_ai
2288vec_cmpge(vector signed long long __a, vector signed long long __b) {
2289 return ~(vec_cmpgt(__b, __a));
2290}
2291
2292static __inline__ vector bool long long __ATTRS_o_ai
2293vec_cmpge(vector unsigned long long __a, vector unsigned long long __b) {
2294 return ~(vec_cmpgt(__b, __a));
2295}
2296#endif
2297
2298#if defined(__POWER10_VECTOR__) && defined(__SIZEOF_INT128__)
2299static __inline__ vector bool __int128 __ATTRS_o_ai
2300vec_cmpge(vector signed __int128 __a, vector signed __int128 __b) {
2301 return ~(vec_cmpgt(__b, __a));
2302}
2303
2304static __inline__ vector bool __int128 __ATTRS_o_ai
2305vec_cmpge(vector unsigned __int128 __a, vector unsigned __int128 __b) {
2306 return ~(vec_cmpgt(__b, __a));
2307}
2308#endif
2309
2310/* vec_vcmpgefp */
2311
2312static __inline__ vector bool int __attribute__((__always_inline__))
2313vec_vcmpgefp(vector float __a, vector float __b) {
2314 return (vector bool int)__builtin_altivec_vcmpgefp(__a, __b);
2315}
2316
2317/* vec_vcmpgtsb */
2318
2319static __inline__ vector bool char __attribute__((__always_inline__))
2320vec_vcmpgtsb(vector signed char __a, vector signed char __b) {
2321 return (vector bool char)__builtin_altivec_vcmpgtsb(__a, __b);
2322}
2323
2324/* vec_vcmpgtub */
2325
2326static __inline__ vector bool char __attribute__((__always_inline__))
2327vec_vcmpgtub(vector unsigned char __a, vector unsigned char __b) {
2328 return (vector bool char)__builtin_altivec_vcmpgtub(__a, __b);
2329}
2330
2331/* vec_vcmpgtsh */
2332
2333static __inline__ vector bool short __attribute__((__always_inline__))
2334vec_vcmpgtsh(vector short __a, vector short __b) {
2335 return (vector bool short)__builtin_altivec_vcmpgtsh(__a, __b);
2336}
2337
2338/* vec_vcmpgtuh */
2339
2340static __inline__ vector bool short __attribute__((__always_inline__))
2341vec_vcmpgtuh(vector unsigned short __a, vector unsigned short __b) {
2342 return (vector bool short)__builtin_altivec_vcmpgtuh(__a, __b);
2343}
2344
2345/* vec_vcmpgtsw */
2346
2347static __inline__ vector bool int __attribute__((__always_inline__))
2348vec_vcmpgtsw(vector int __a, vector int __b) {
2349 return (vector bool int)__builtin_altivec_vcmpgtsw(__a, __b);
2350}
2351
2352/* vec_vcmpgtuw */
2353
2354static __inline__ vector bool int __attribute__((__always_inline__))
2355vec_vcmpgtuw(vector unsigned int __a, vector unsigned int __b) {
2356 return (vector bool int)__builtin_altivec_vcmpgtuw(__a, __b);
2357}
2358
2359/* vec_vcmpgtfp */
2360
2361static __inline__ vector bool int __attribute__((__always_inline__))
2362vec_vcmpgtfp(vector float __a, vector float __b) {
2363 return (vector bool int)__builtin_altivec_vcmpgtfp(__a, __b);
2364}
2365
2366/* vec_cmple */
2367
2368static __inline__ vector bool char __ATTRS_o_ai
2369vec_cmple(vector signed char __a, vector signed char __b) {
2370 return vec_cmpge(__b, __a);
2371}
2372
2373static __inline__ vector bool char __ATTRS_o_ai
2374vec_cmple(vector unsigned char __a, vector unsigned char __b) {
2375 return vec_cmpge(__b, __a);
2376}
2377
2378static __inline__ vector bool short __ATTRS_o_ai
2379vec_cmple(vector signed short __a, vector signed short __b) {
2380 return vec_cmpge(__b, __a);
2381}
2382
2383static __inline__ vector bool short __ATTRS_o_ai
2384vec_cmple(vector unsigned short __a, vector unsigned short __b) {
2385 return vec_cmpge(__b, __a);
2386}
2387
2388static __inline__ vector bool int __ATTRS_o_ai
2389vec_cmple(vector signed int __a, vector signed int __b) {
2390 return vec_cmpge(__b, __a);
2391}
2392
2393static __inline__ vector bool int __ATTRS_o_ai
2394vec_cmple(vector unsigned int __a, vector unsigned int __b) {
2395 return vec_cmpge(__b, __a);
2396}
2397
2398static __inline__ vector bool int __ATTRS_o_ai vec_cmple(vector float __a,
2399 vector float __b) {
2400 return vec_cmpge(__b, __a);
2401}
2402
2403#ifdef __VSX__
2404static __inline__ vector bool long long __ATTRS_o_ai
2405vec_cmple(vector double __a, vector double __b) {
2406 return vec_cmpge(__b, __a);
2407}
2408
2409static __inline__ vector bool long long __ATTRS_o_ai
2410vec_cmple(vector signed long long __a, vector signed long long __b) {
2411 return vec_cmpge(__b, __a);
2412}
2413
2414static __inline__ vector bool long long __ATTRS_o_ai
2415vec_cmple(vector unsigned long long __a, vector unsigned long long __b) {
2416 return vec_cmpge(__b, __a);
2417}
2418#endif
2419
2420#if defined(__POWER10_VECTOR__) && defined(__SIZEOF_INT128__)
2421static __inline__ vector bool __int128 __ATTRS_o_ai
2422vec_cmple(vector signed __int128 __a, vector signed __int128 __b) {
2423 return vec_cmpge(__b, __a);
2424}
2425
2426static __inline__ vector bool __int128 __ATTRS_o_ai
2427vec_cmple(vector unsigned __int128 __a, vector unsigned __int128 __b) {
2428 return vec_cmpge(__b, __a);
2429}
2430#endif
2431
2432/* vec_cmplt */
2433
2434static __inline__ vector bool char __ATTRS_o_ai
2435vec_cmplt(vector signed char __a, vector signed char __b) {
2436 return vec_cmpgt(__b, __a);
2437}
2438
2439static __inline__ vector bool char __ATTRS_o_ai
2440vec_cmplt(vector unsigned char __a, vector unsigned char __b) {
2441 return vec_cmpgt(__b, __a);
2442}
2443
2444static __inline__ vector bool short __ATTRS_o_ai vec_cmplt(vector short __a,
2445 vector short __b) {
2446 return vec_cmpgt(__b, __a);
2447}
2448
2449static __inline__ vector bool short __ATTRS_o_ai
2450vec_cmplt(vector unsigned short __a, vector unsigned short __b) {
2451 return vec_cmpgt(__b, __a);
2452}
2453
2454static __inline__ vector bool int __ATTRS_o_ai vec_cmplt(vector int __a,
2455 vector int __b) {
2456 return vec_cmpgt(__b, __a);
2457}
2458
2459static __inline__ vector bool int __ATTRS_o_ai
2460vec_cmplt(vector unsigned int __a, vector unsigned int __b) {
2461 return vec_cmpgt(__b, __a);
2462}
2463
2464static __inline__ vector bool int __ATTRS_o_ai vec_cmplt(vector float __a,
2465 vector float __b) {
2466 return vec_cmpgt(__b, __a);
2467}
2468
2469#ifdef __VSX__
2470static __inline__ vector bool long long __ATTRS_o_ai
2471vec_cmplt(vector double __a, vector double __b) {
2472 return vec_cmpgt(__b, __a);
2473}
2474#endif
2475
2476#if defined(__POWER10_VECTOR__) && defined(__SIZEOF_INT128__)
2477static __inline__ vector bool __int128 __ATTRS_o_ai
2478vec_cmplt(vector signed __int128 __a, vector signed __int128 __b) {
2479 return vec_cmpgt(__b, __a);
2480}
2481
2482static __inline__ vector bool __int128 __ATTRS_o_ai
2483vec_cmplt(vector unsigned __int128 __a, vector unsigned __int128 __b) {
2484 return vec_cmpgt(__b, __a);
2485}
2486#endif
2487
2488#ifdef __VSX__
2489static __inline__ vector bool long long __ATTRS_o_ai
2490vec_cmplt(vector signed long long __a, vector signed long long __b) {
2491 return vec_cmpgt(__b, __a);
2492}
2493
2494static __inline__ vector bool long long __ATTRS_o_ai
2495vec_cmplt(vector unsigned long long __a, vector unsigned long long __b) {
2496 return vec_cmpgt(__b, __a);
2497}
2498#endif
2499
2500#ifdef __POWER8_VECTOR__
2501/* vec_popcnt */
2502
2503static __inline__ vector unsigned char __ATTRS_o_ai
2504vec_popcnt(vector signed char __a) {
2505 return (vector unsigned char)__builtin_altivec_vpopcntb(
2506 (vector unsigned char)__a);
2507}
2508static __inline__ vector unsigned char __ATTRS_o_ai
2509vec_popcnt(vector unsigned char __a) {
2510 return __builtin_altivec_vpopcntb(__a);
2511}
2512static __inline__ vector unsigned short __ATTRS_o_ai
2513vec_popcnt(vector signed short __a) {
2514 return (vector unsigned short)__builtin_altivec_vpopcnth(
2515 (vector unsigned short)__a);
2516}
2517static __inline__ vector unsigned short __ATTRS_o_ai
2518vec_popcnt(vector unsigned short __a) {
2519 return __builtin_altivec_vpopcnth(__a);
2520}
2521static __inline__ vector unsigned int __ATTRS_o_ai
2522vec_popcnt(vector signed int __a) {
2523 return __builtin_altivec_vpopcntw((vector unsigned int)__a);
2524}
2525static __inline__ vector unsigned int __ATTRS_o_ai
2526vec_popcnt(vector unsigned int __a) {
2527 return __builtin_altivec_vpopcntw(__a);
2528}
2529static __inline__ vector unsigned long long __ATTRS_o_ai
2530vec_popcnt(vector signed long long __a) {
2531 return __builtin_altivec_vpopcntd((vector unsigned long long)__a);
2532}
2533static __inline__ vector unsigned long long __ATTRS_o_ai
2534vec_popcnt(vector unsigned long long __a) {
2535 return __builtin_altivec_vpopcntd(__a);
2536}
2537
2538#define vec_vclz vec_cntlz
2539/* vec_cntlz */
2540
2541static __inline__ vector signed char __ATTRS_o_ai
2542vec_cntlz(vector signed char __a) {
2543 return (vector signed char)__builtin_altivec_vclzb((vector unsigned char)__a);
2544}
2545static __inline__ vector unsigned char __ATTRS_o_ai
2546vec_cntlz(vector unsigned char __a) {
2547 return __builtin_altivec_vclzb(__a);
2548}
2549static __inline__ vector signed short __ATTRS_o_ai
2550vec_cntlz(vector signed short __a) {
2551 return (vector signed short)__builtin_altivec_vclzh(
2552 (vector unsigned short)__a);
2553}
2554static __inline__ vector unsigned short __ATTRS_o_ai
2555vec_cntlz(vector unsigned short __a) {
2556 return __builtin_altivec_vclzh(__a);
2557}
2558static __inline__ vector signed int __ATTRS_o_ai
2559vec_cntlz(vector signed int __a) {
2560 return (vector signed int)__builtin_altivec_vclzw((vector unsigned int)__a);
2561}
2562static __inline__ vector unsigned int __ATTRS_o_ai
2563vec_cntlz(vector unsigned int __a) {
2564 return __builtin_altivec_vclzw(__a);
2565}
2566static __inline__ vector signed long long __ATTRS_o_ai
2567vec_cntlz(vector signed long long __a) {
2568 return (vector signed long long)__builtin_altivec_vclzd(
2569 (vector unsigned long long)__a);
2570}
2571static __inline__ vector unsigned long long __ATTRS_o_ai
2572vec_cntlz(vector unsigned long long __a) {
2573 return __builtin_altivec_vclzd(__a);
2574}
2575#endif
2576
2577#ifdef __POWER9_VECTOR__
2578
2579/* vec_cnttz */
2580
2581static __inline__ vector signed char __ATTRS_o_ai
2582vec_cnttz(vector signed char __a) {
2583 return (vector signed char)__builtin_altivec_vctzb((vector unsigned char)__a);
2584}
2585static __inline__ vector unsigned char __ATTRS_o_ai
2586vec_cnttz(vector unsigned char __a) {
2587 return __builtin_altivec_vctzb(__a);
2588}
2589static __inline__ vector signed short __ATTRS_o_ai
2590vec_cnttz(vector signed short __a) {
2591 return (vector signed short)__builtin_altivec_vctzh(
2592 (vector unsigned short)__a);
2593}
2594static __inline__ vector unsigned short __ATTRS_o_ai
2595vec_cnttz(vector unsigned short __a) {
2596 return __builtin_altivec_vctzh(__a);
2597}
2598static __inline__ vector signed int __ATTRS_o_ai
2599vec_cnttz(vector signed int __a) {
2600 return (vector signed int)__builtin_altivec_vctzw((vector unsigned int)__a);
2601}
2602static __inline__ vector unsigned int __ATTRS_o_ai
2603vec_cnttz(vector unsigned int __a) {
2604 return __builtin_altivec_vctzw(__a);
2605}
2606static __inline__ vector signed long long __ATTRS_o_ai
2607vec_cnttz(vector signed long long __a) {
2608 return (vector signed long long)__builtin_altivec_vctzd(
2609 (vector unsigned long long)__a);
2610}
2611static __inline__ vector unsigned long long __ATTRS_o_ai
2612vec_cnttz(vector unsigned long long __a) {
2613 return __builtin_altivec_vctzd(__a);
2614}
2615
2616/* vec_first_match_index */
2617
2618static __inline__ unsigned __ATTRS_o_ai
2619vec_first_match_index(vector signed char __a, vector signed char __b) {
2620 vector unsigned long long __res =
2621#ifdef __LITTLE_ENDIAN__
2622 vec_cnttz((vector unsigned long long)vec_cmpeq(__a, __b));
2623#else
2624 vec_cntlz((vector unsigned long long)vec_cmpeq(__a, __b));
2625#endif
2626 if (__res[0] == 64) {
2627 return (__res[1] + 64) >> 3;
2628 }
2629 return __res[0] >> 3;
2630}
2631
2632static __inline__ unsigned __ATTRS_o_ai
2633vec_first_match_index(vector unsigned char __a, vector unsigned char __b) {
2634 vector unsigned long long __res =
2635#ifdef __LITTLE_ENDIAN__
2636 vec_cnttz((vector unsigned long long)vec_cmpeq(__a, __b));
2637#else
2638 vec_cntlz((vector unsigned long long)vec_cmpeq(__a, __b));
2639#endif
2640 if (__res[0] == 64) {
2641 return (__res[1] + 64) >> 3;
2642 }
2643 return __res[0] >> 3;
2644}
2645
2646static __inline__ unsigned __ATTRS_o_ai
2647vec_first_match_index(vector signed short __a, vector signed short __b) {
2648 vector unsigned long long __res =
2649#ifdef __LITTLE_ENDIAN__
2650 vec_cnttz((vector unsigned long long)vec_cmpeq(__a, __b));
2651#else
2652 vec_cntlz((vector unsigned long long)vec_cmpeq(__a, __b));
2653#endif
2654 if (__res[0] == 64) {
2655 return (__res[1] + 64) >> 4;
2656 }
2657 return __res[0] >> 4;
2658}
2659
2660static __inline__ unsigned __ATTRS_o_ai
2661vec_first_match_index(vector unsigned short __a, vector unsigned short __b) {
2662 vector unsigned long long __res =
2663#ifdef __LITTLE_ENDIAN__
2664 vec_cnttz((vector unsigned long long)vec_cmpeq(__a, __b));
2665#else
2666 vec_cntlz((vector unsigned long long)vec_cmpeq(__a, __b));
2667#endif
2668 if (__res[0] == 64) {
2669 return (__res[1] + 64) >> 4;
2670 }
2671 return __res[0] >> 4;
2672}
2673
2674static __inline__ unsigned __ATTRS_o_ai
2675vec_first_match_index(vector signed int __a, vector signed int __b) {
2676 vector unsigned long long __res =
2677#ifdef __LITTLE_ENDIAN__
2678 vec_cnttz((vector unsigned long long)vec_cmpeq(__a, __b));
2679#else
2680 vec_cntlz((vector unsigned long long)vec_cmpeq(__a, __b));
2681#endif
2682 if (__res[0] == 64) {
2683 return (__res[1] + 64) >> 5;
2684 }
2685 return __res[0] >> 5;
2686}
2687
2688static __inline__ unsigned __ATTRS_o_ai
2689vec_first_match_index(vector unsigned int __a, vector unsigned int __b) {
2690 vector unsigned long long __res =
2691#ifdef __LITTLE_ENDIAN__
2692 vec_cnttz((vector unsigned long long)vec_cmpeq(__a, __b));
2693#else
2694 vec_cntlz((vector unsigned long long)vec_cmpeq(__a, __b));
2695#endif
2696 if (__res[0] == 64) {
2697 return (__res[1] + 64) >> 5;
2698 }
2699 return __res[0] >> 5;
2700}
2701
2702/* vec_first_match_or_eos_index */
2703
2704static __inline__ unsigned __ATTRS_o_ai
2705vec_first_match_or_eos_index(vector signed char __a, vector signed char __b) {
2706 /* Compare the result of the comparison of two vectors with either and OR the
2707 result. Either the elements are equal or one will equal the comparison
2708 result if either is zero.
2709 */
2710 vector bool char __tmp1 = vec_cmpeq(__a, __b);
2711 vector bool char __tmp2 = __tmp1 |
2712 vec_cmpeq((vector signed char)__tmp1, __a) |
2713 vec_cmpeq((vector signed char)__tmp1, __b);
2714
2715 vector unsigned long long __res =
2716#ifdef __LITTLE_ENDIAN__
2717 vec_cnttz((vector unsigned long long)__tmp2);
2718#else
2719 vec_cntlz((vector unsigned long long)__tmp2);
2720#endif
2721 if (__res[0] == 64) {
2722 return (__res[1] + 64) >> 3;
2723 }
2724 return __res[0] >> 3;
2725}
2726
2727static __inline__ unsigned __ATTRS_o_ai
2728vec_first_match_or_eos_index(vector unsigned char __a,
2729 vector unsigned char __b) {
2730 vector bool char __tmp1 = vec_cmpeq(__a, __b);
2731 vector bool char __tmp2 = __tmp1 |
2732 vec_cmpeq((vector unsigned char)__tmp1, __a) |
2733 vec_cmpeq((vector unsigned char)__tmp1, __b);
2734
2735 vector unsigned long long __res =
2736#ifdef __LITTLE_ENDIAN__
2737 vec_cnttz((vector unsigned long long)__tmp2);
2738#else
2739 vec_cntlz((vector unsigned long long)__tmp2);
2740#endif
2741 if (__res[0] == 64) {
2742 return (__res[1] + 64) >> 3;
2743 }
2744 return __res[0] >> 3;
2745}
2746
2747static __inline__ unsigned __ATTRS_o_ai
2748vec_first_match_or_eos_index(vector signed short __a, vector signed short __b) {
2749 vector bool short __tmp1 = vec_cmpeq(__a, __b);
2750 vector bool short __tmp2 = __tmp1 |
2751 vec_cmpeq((vector signed short)__tmp1, __a) |
2752 vec_cmpeq((vector signed short)__tmp1, __b);
2753
2754 vector unsigned long long __res =
2755#ifdef __LITTLE_ENDIAN__
2756 vec_cnttz((vector unsigned long long)__tmp2);
2757#else
2758 vec_cntlz((vector unsigned long long)__tmp2);
2759#endif
2760 if (__res[0] == 64) {
2761 return (__res[1] + 64) >> 4;
2762 }
2763 return __res[0] >> 4;
2764}
2765
2766static __inline__ unsigned __ATTRS_o_ai
2767vec_first_match_or_eos_index(vector unsigned short __a,
2768 vector unsigned short __b) {
2769 vector bool short __tmp1 = vec_cmpeq(__a, __b);
2770 vector bool short __tmp2 = __tmp1 |
2771 vec_cmpeq((vector unsigned short)__tmp1, __a) |
2772 vec_cmpeq((vector unsigned short)__tmp1, __b);
2773
2774 vector unsigned long long __res =
2775#ifdef __LITTLE_ENDIAN__
2776 vec_cnttz((vector unsigned long long)__tmp2);
2777#else
2778 vec_cntlz((vector unsigned long long)__tmp2);
2779#endif
2780 if (__res[0] == 64) {
2781 return (__res[1] + 64) >> 4;
2782 }
2783 return __res[0] >> 4;
2784}
2785
2786static __inline__ unsigned __ATTRS_o_ai
2787vec_first_match_or_eos_index(vector signed int __a, vector signed int __b) {
2788 vector bool int __tmp1 = vec_cmpeq(__a, __b);
2789 vector bool int __tmp2 = __tmp1 | vec_cmpeq((vector signed int)__tmp1, __a) |
2790 vec_cmpeq((vector signed int)__tmp1, __b);
2791
2792 vector unsigned long long __res =
2793#ifdef __LITTLE_ENDIAN__
2794 vec_cnttz((vector unsigned long long)__tmp2);
2795#else
2796 vec_cntlz((vector unsigned long long)__tmp2);
2797#endif
2798 if (__res[0] == 64) {
2799 return (__res[1] + 64) >> 5;
2800 }
2801 return __res[0] >> 5;
2802}
2803
2804static __inline__ unsigned __ATTRS_o_ai
2805vec_first_match_or_eos_index(vector unsigned int __a, vector unsigned int __b) {
2806 vector bool int __tmp1 = vec_cmpeq(__a, __b);
2807 vector bool int __tmp2 = __tmp1 |
2808 vec_cmpeq((vector unsigned int)__tmp1, __a) |
2809 vec_cmpeq((vector unsigned int)__tmp1, __b);
2810
2811 vector unsigned long long __res =
2812#ifdef __LITTLE_ENDIAN__
2813 vec_cnttz((vector unsigned long long)__tmp2);
2814#else
2815 vec_cntlz((vector unsigned long long)__tmp2);
2816#endif
2817 if (__res[0] == 64) {
2818 return (__res[1] + 64) >> 5;
2819 }
2820 return __res[0] >> 5;
2821}
2822
2823/* vec_first_mismatch_index */
2824
2825static __inline__ unsigned __ATTRS_o_ai
2826vec_first_mismatch_index(vector signed char __a, vector signed char __b) {
2827 vector unsigned long long __res =
2828#ifdef __LITTLE_ENDIAN__
2829 vec_cnttz((vector unsigned long long)vec_cmpne(__a, __b));
2830#else
2831 vec_cntlz((vector unsigned long long)vec_cmpne(__a, __b));
2832#endif
2833 if (__res[0] == 64) {
2834 return (__res[1] + 64) >> 3;
2835 }
2836 return __res[0] >> 3;
2837}
2838
2839static __inline__ unsigned __ATTRS_o_ai
2840vec_first_mismatch_index(vector unsigned char __a, vector unsigned char __b) {
2841 vector unsigned long long __res =
2842#ifdef __LITTLE_ENDIAN__
2843 vec_cnttz((vector unsigned long long)vec_cmpne(__a, __b));
2844#else
2845 vec_cntlz((vector unsigned long long)vec_cmpne(__a, __b));
2846#endif
2847 if (__res[0] == 64) {
2848 return (__res[1] + 64) >> 3;
2849 }
2850 return __res[0] >> 3;
2851}
2852
2853static __inline__ unsigned __ATTRS_o_ai
2854vec_first_mismatch_index(vector signed short __a, vector signed short __b) {
2855 vector unsigned long long __res =
2856#ifdef __LITTLE_ENDIAN__
2857 vec_cnttz((vector unsigned long long)vec_cmpne(__a, __b));
2858#else
2859 vec_cntlz((vector unsigned long long)vec_cmpne(__a, __b));
2860#endif
2861 if (__res[0] == 64) {
2862 return (__res[1] + 64) >> 4;
2863 }
2864 return __res[0] >> 4;
2865}
2866
2867static __inline__ unsigned __ATTRS_o_ai
2868vec_first_mismatch_index(vector unsigned short __a, vector unsigned short __b) {
2869 vector unsigned long long __res =
2870#ifdef __LITTLE_ENDIAN__
2871 vec_cnttz((vector unsigned long long)vec_cmpne(__a, __b));
2872#else
2873 vec_cntlz((vector unsigned long long)vec_cmpne(__a, __b));
2874#endif
2875 if (__res[0] == 64) {
2876 return (__res[1] + 64) >> 4;
2877 }
2878 return __res[0] >> 4;
2879}
2880
2881static __inline__ unsigned __ATTRS_o_ai
2882vec_first_mismatch_index(vector signed int __a, vector signed int __b) {
2883 vector unsigned long long __res =
2884#ifdef __LITTLE_ENDIAN__
2885 vec_cnttz((vector unsigned long long)vec_cmpne(__a, __b));
2886#else
2887 vec_cntlz((vector unsigned long long)vec_cmpne(__a, __b));
2888#endif
2889 if (__res[0] == 64) {
2890 return (__res[1] + 64) >> 5;
2891 }
2892 return __res[0] >> 5;
2893}
2894
2895static __inline__ unsigned __ATTRS_o_ai
2896vec_first_mismatch_index(vector unsigned int __a, vector unsigned int __b) {
2897 vector unsigned long long __res =
2898#ifdef __LITTLE_ENDIAN__
2899 vec_cnttz((vector unsigned long long)vec_cmpne(__a, __b));
2900#else
2901 vec_cntlz((vector unsigned long long)vec_cmpne(__a, __b));
2902#endif
2903 if (__res[0] == 64) {
2904 return (__res[1] + 64) >> 5;
2905 }
2906 return __res[0] >> 5;
2907}
2908
2909/* vec_first_mismatch_or_eos_index */
2910
2911static __inline__ unsigned __ATTRS_o_ai
2912vec_first_mismatch_or_eos_index(vector signed char __a,
2913 vector signed char __b) {
2914 vector unsigned long long __res =
2915#ifdef __LITTLE_ENDIAN__
2916 vec_cnttz((vector unsigned long long)vec_cmpnez(__a, __b));
2917#else
2918 vec_cntlz((vector unsigned long long)vec_cmpnez(__a, __b));
2919#endif
2920 if (__res[0] == 64) {
2921 return (__res[1] + 64) >> 3;
2922 }
2923 return __res[0] >> 3;
2924}
2925
2926static __inline__ unsigned __ATTRS_o_ai
2927vec_first_mismatch_or_eos_index(vector unsigned char __a,
2928 vector unsigned char __b) {
2929 vector unsigned long long __res =
2930#ifdef __LITTLE_ENDIAN__
2931 vec_cnttz((vector unsigned long long)vec_cmpnez(__a, __b));
2932#else
2933 vec_cntlz((vector unsigned long long)vec_cmpnez(__a, __b));
2934#endif
2935 if (__res[0] == 64) {
2936 return (__res[1] + 64) >> 3;
2937 }
2938 return __res[0] >> 3;
2939}
2940
2941static __inline__ unsigned __ATTRS_o_ai
2942vec_first_mismatch_or_eos_index(vector signed short __a,
2943 vector signed short __b) {
2944 vector unsigned long long __res =
2945#ifdef __LITTLE_ENDIAN__
2946 vec_cnttz((vector unsigned long long)vec_cmpnez(__a, __b));
2947#else
2948 vec_cntlz((vector unsigned long long)vec_cmpnez(__a, __b));
2949#endif
2950 if (__res[0] == 64) {
2951 return (__res[1] + 64) >> 4;
2952 }
2953 return __res[0] >> 4;
2954}
2955
2956static __inline__ unsigned __ATTRS_o_ai
2957vec_first_mismatch_or_eos_index(vector unsigned short __a,
2958 vector unsigned short __b) {
2959 vector unsigned long long __res =
2960#ifdef __LITTLE_ENDIAN__
2961 vec_cnttz((vector unsigned long long)vec_cmpnez(__a, __b));
2962#else
2963 vec_cntlz((vector unsigned long long)vec_cmpnez(__a, __b));
2964#endif
2965 if (__res[0] == 64) {
2966 return (__res[1] + 64) >> 4;
2967 }
2968 return __res[0] >> 4;
2969}
2970
2971static __inline__ unsigned __ATTRS_o_ai
2972vec_first_mismatch_or_eos_index(vector signed int __a, vector signed int __b) {
2973 vector unsigned long long __res =
2974#ifdef __LITTLE_ENDIAN__
2975 vec_cnttz((vector unsigned long long)vec_cmpnez(__a, __b));
2976#else
2977 vec_cntlz((vector unsigned long long)vec_cmpnez(__a, __b));
2978#endif
2979 if (__res[0] == 64) {
2980 return (__res[1] + 64) >> 5;
2981 }
2982 return __res[0] >> 5;
2983}
2984
2985static __inline__ unsigned __ATTRS_o_ai
2986vec_first_mismatch_or_eos_index(vector unsigned int __a,
2987 vector unsigned int __b) {
2988 vector unsigned long long __res =
2989#ifdef __LITTLE_ENDIAN__
2990 vec_cnttz((vector unsigned long long)vec_cmpnez(__a, __b));
2991#else
2992 vec_cntlz((vector unsigned long long)vec_cmpnez(__a, __b));
2993#endif
2994 if (__res[0] == 64) {
2995 return (__res[1] + 64) >> 5;
2996 }
2997 return __res[0] >> 5;
2998}
2999
3000static __inline__ vector double __ATTRS_o_ai
3001vec_insert_exp(vector double __a, vector unsigned long long __b) {
3002 return __builtin_vsx_xviexpdp((vector unsigned long long)__a,__b);
3003}
3004
3005static __inline__ vector double __ATTRS_o_ai
3006vec_insert_exp(vector unsigned long long __a, vector unsigned long long __b) {
3007 return __builtin_vsx_xviexpdp(__a,__b);
3008}
3009
3010static __inline__ vector float __ATTRS_o_ai
3011vec_insert_exp(vector float __a, vector unsigned int __b) {
3012 return __builtin_vsx_xviexpsp((vector unsigned int)__a,__b);
3013}
3014
3015static __inline__ vector float __ATTRS_o_ai
3016vec_insert_exp(vector unsigned int __a, vector unsigned int __b) {
3017 return __builtin_vsx_xviexpsp(__a,__b);
3018}
3019
3020#if defined(__powerpc64__)
3021static __inline__ vector signed char __ATTRS_o_ai vec_xl_len(const signed char *__a,
3022 size_t __b) {
3023 return (vector signed char)__builtin_vsx_lxvl(__a, (__b << 56));
3024}
3025
3026static __inline__ vector unsigned char __ATTRS_o_ai
3027vec_xl_len(const unsigned char *__a, size_t __b) {
3028 return (vector unsigned char)__builtin_vsx_lxvl(__a, (__b << 56));
3029}
3030
3031static __inline__ vector signed short __ATTRS_o_ai vec_xl_len(const signed short *__a,
3032 size_t __b) {
3033 return (vector signed short)__builtin_vsx_lxvl(__a, (__b << 56));
3034}
3035
3036static __inline__ vector unsigned short __ATTRS_o_ai
3037vec_xl_len(const unsigned short *__a, size_t __b) {
3038 return (vector unsigned short)__builtin_vsx_lxvl(__a, (__b << 56));
3039}
3040
3041static __inline__ vector signed int __ATTRS_o_ai vec_xl_len(const signed int *__a,
3042 size_t __b) {
3043 return (vector signed int)__builtin_vsx_lxvl(__a, (__b << 56));
3044}
3045
3046static __inline__ vector unsigned int __ATTRS_o_ai vec_xl_len(const unsigned int *__a,
3047 size_t __b) {
3048 return (vector unsigned int)__builtin_vsx_lxvl(__a, (__b << 56));
3049}
3050
3051static __inline__ vector float __ATTRS_o_ai vec_xl_len(const float *__a, size_t __b) {
3052 return (vector float)__builtin_vsx_lxvl(__a, (__b << 56));
3053}
3054
3055#ifdef __SIZEOF_INT128__
3056static __inline__ vector signed __int128 __ATTRS_o_ai
3057vec_xl_len(const signed __int128 *__a, size_t __b) {
3058 return (vector signed __int128)__builtin_vsx_lxvl(__a, (__b << 56));
3059}
3060
3061static __inline__ vector unsigned __int128 __ATTRS_o_ai
3062vec_xl_len(const unsigned __int128 *__a, size_t __b) {
3063 return (vector unsigned __int128)__builtin_vsx_lxvl(__a, (__b << 56));
3064}
3065#endif
3066
3067static __inline__ vector signed long long __ATTRS_o_ai
3068vec_xl_len(const signed long long *__a, size_t __b) {
3069 return (vector signed long long)__builtin_vsx_lxvl(__a, (__b << 56));
3070}
3071
3072static __inline__ vector unsigned long long __ATTRS_o_ai
3073vec_xl_len(const unsigned long long *__a, size_t __b) {
3074 return (vector unsigned long long)__builtin_vsx_lxvl(__a, (__b << 56));
3075}
3076
3077static __inline__ vector double __ATTRS_o_ai vec_xl_len(const double *__a,
3078 size_t __b) {
3079 return (vector double)__builtin_vsx_lxvl(__a, (__b << 56));
3080}
3081
3082static __inline__ vector unsigned char __ATTRS_o_ai
3083vec_xl_len_r(const unsigned char *__a, size_t __b) {
3084 vector unsigned char __res =
3085 (vector unsigned char)__builtin_vsx_lxvll(__a, (__b << 56));
3086 vector unsigned char __mask =
3087 (vector unsigned char)__builtin_altivec_lvsr(16 - __b, (int *)NULL);
3088 return (vector unsigned char)__builtin_altivec_vperm_4si(
3089 (vector int)__res, (vector int)__res, __mask);
3090}
3091
3092// vec_xst_len
3093static __inline__ void __ATTRS_o_ai vec_xst_len(vector unsigned char __a,
3094 unsigned char *__b,
3095 size_t __c) {
3096 return __builtin_vsx_stxvl((vector int)__a, __b, (__c << 56));
3097}
3098
3099static __inline__ void __ATTRS_o_ai vec_xst_len(vector signed char __a,
3100 signed char *__b, size_t __c) {
3101 return __builtin_vsx_stxvl((vector int)__a, __b, (__c << 56));
3102}
3103
3104static __inline__ void __ATTRS_o_ai vec_xst_len(vector signed short __a,
3105 signed short *__b, size_t __c) {
3106 return __builtin_vsx_stxvl((vector int)__a, __b, (__c << 56));
3107}
3108
3109static __inline__ void __ATTRS_o_ai vec_xst_len(vector unsigned short __a,
3110 unsigned short *__b,
3111 size_t __c) {
3112 return __builtin_vsx_stxvl((vector int)__a, __b, (__c << 56));
3113}
3114
3115static __inline__ void __ATTRS_o_ai vec_xst_len(vector signed int __a,
3116 signed int *__b, size_t __c) {
3117 return __builtin_vsx_stxvl((vector int)__a, __b, (__c << 56));
3118}
3119
3120static __inline__ void __ATTRS_o_ai vec_xst_len(vector unsigned int __a,
3121 unsigned int *__b, size_t __c) {
3122 return __builtin_vsx_stxvl((vector int)__a, __b, (__c << 56));
3123}
3124
3125static __inline__ void __ATTRS_o_ai vec_xst_len(vector float __a, float *__b,
3126 size_t __c) {
3127 return __builtin_vsx_stxvl((vector int)__a, __b, (__c << 56));
3128}
3129
3130#ifdef __SIZEOF_INT128__
3131static __inline__ void __ATTRS_o_ai vec_xst_len(vector signed __int128 __a,
3132 signed __int128 *__b,
3133 size_t __c) {
3134 return __builtin_vsx_stxvl((vector int)__a, __b, (__c << 56));
3135}
3136
3137static __inline__ void __ATTRS_o_ai vec_xst_len(vector unsigned __int128 __a,
3138 unsigned __int128 *__b,
3139 size_t __c) {
3140 return __builtin_vsx_stxvl((vector int)__a, __b, (__c << 56));
3141}
3142#endif
3143
3144static __inline__ void __ATTRS_o_ai vec_xst_len(vector signed long long __a,
3145 signed long long *__b,
3146 size_t __c) {
3147 return __builtin_vsx_stxvl((vector int)__a, __b, (__c << 56));
3148}
3149
3150static __inline__ void __ATTRS_o_ai vec_xst_len(vector unsigned long long __a,
3151 unsigned long long *__b,
3152 size_t __c) {
3153 return __builtin_vsx_stxvl((vector int)__a, __b, (__c << 56));
3154}
3155
3156static __inline__ void __ATTRS_o_ai vec_xst_len(vector double __a, double *__b,
3157 size_t __c) {
3158 return __builtin_vsx_stxvl((vector int)__a, __b, (__c << 56));
3159}
3160
3161static __inline__ void __ATTRS_o_ai vec_xst_len_r(vector unsigned char __a,
3162 unsigned char *__b,
3163 size_t __c) {
3164 vector unsigned char __mask =
3165 (vector unsigned char)__builtin_altivec_lvsl(16 - __c, (int *)NULL);
3166 vector unsigned char __res =
3167 (vector unsigned char)__builtin_altivec_vperm_4si(
3168 (vector int)__a, (vector int)__a, __mask);
3169 return __builtin_vsx_stxvll((vector int)__res, __b, (__c << 56));
3170}
3171#endif
3172#endif
3173
3174#if defined(__POWER9_VECTOR__) && defined(__powerpc64__)
3175#define __vec_ldrmb(PTR, CNT) vec_xl_len_r((const unsigned char *)(PTR), (CNT))
3176#define __vec_strmb(PTR, CNT, VAL) \
3177 vec_xst_len_r((VAL), (unsigned char *)(PTR), (CNT))
3178#else
3179#define __vec_ldrmb __builtin_vsx_ldrmb
3180#define __vec_strmb __builtin_vsx_strmb
3181#endif
3182
3183/* vec_cpsgn */
3184
3185#ifdef __VSX__
3186static __inline__ vector float __ATTRS_o_ai vec_cpsgn(vector float __a,
3187 vector float __b) {
3188 return __builtin_vsx_xvcpsgnsp(__b, __a);
3189}
3190
3191static __inline__ vector double __ATTRS_o_ai vec_cpsgn(vector double __a,
3192 vector double __b) {
3193 return __builtin_vsx_xvcpsgndp(__b, __a);
3194}
3195#endif
3196
3197/* vec_ctf */
3198
3199#ifdef __VSX__
3200// There are some functions that have different signatures with the XL compiler
3201// from those in Clang/GCC and documented in the PVIPR. This macro ensures that
3202// the XL-compatible signatures are used for those functions.
3203#ifdef __XL_COMPAT_ALTIVEC__
3204#define vec_ctf(__a, __b) \
3205 _Generic( \
3206 (__a), vector int \
3207 : (vector float)__builtin_altivec_vcfsx((vector int)(__a), (__b)), \
3208 vector unsigned int \
3209 : (vector float)__builtin_altivec_vcfux((vector unsigned int)(__a), \
3210 (__b)), \
3211 vector unsigned long long \
3212 : (vector float)(__builtin_vsx_xvcvuxdsp( \
3213 (vector unsigned long long)(__a)) * \
3214 (vector float)(vector unsigned)((0x7f - (__b)) << 23)), \
3215 vector signed long long \
3216 : (vector float)(__builtin_vsx_xvcvsxdsp( \
3217 (vector signed long long)(__a)) * \
3218 (vector float)(vector unsigned)((0x7f - (__b)) << 23)))
3219#else // __XL_COMPAT_ALTIVEC__
3220#define vec_ctf(__a, __b) \
3221 _Generic( \
3222 (__a), vector int \
3223 : (vector float)__builtin_altivec_vcfsx((vector int)(__a), (__b)), \
3224 vector unsigned int \
3225 : (vector float)__builtin_altivec_vcfux((vector unsigned int)(__a), \
3226 (__b)), \
3227 vector unsigned long long \
3228 : (vector float)(__builtin_convertvector( \
3229 (vector unsigned long long)(__a), vector double) * \
3230 (vector double)(vector unsigned long long)((0x3ffULL - \
3231 (__b)) \
3232 << 52)), \
3233 vector signed long long \
3234 : (vector float)(__builtin_convertvector((vector signed long long)(__a), \
3235 vector double) * \
3236 (vector double)(vector unsigned long long)((0x3ffULL - \
3237 (__b)) \
3238 << 52)))
3239#endif // __XL_COMPAT_ALTIVEC__
3240#else
3241#define vec_ctf(__a, __b) \
3242 _Generic((__a), vector int \
3243 : (vector float)__builtin_altivec_vcfsx((vector int)(__a), (__b)), \
3244 vector unsigned int \
3245 : (vector float)__builtin_altivec_vcfux((vector unsigned int)(__a), \
3246 (__b)))
3247#endif
3248
3249/* vec_ctd */
3250#ifdef __VSX__
3251#define vec_ctd(__a, __b) \
3252 _Generic((__a), vector signed int \
3253 : (vec_doublee((vector signed int)(__a)) * \
3254 (vector double)(vector unsigned long long)((0x3ffULL - (__b)) \
3255 << 52)), \
3256 vector unsigned int \
3257 : (vec_doublee((vector unsigned int)(__a)) * \
3258 (vector double)(vector unsigned long long)((0x3ffULL - (__b)) \
3259 << 52)), \
3260 vector unsigned long long \
3261 : (__builtin_convertvector((vector unsigned long long)(__a), \
3262 vector double) * \
3263 (vector double)(vector unsigned long long)((0x3ffULL - (__b)) \
3264 << 52)), \
3265 vector signed long long \
3266 : (__builtin_convertvector((vector signed long long)(__a), \
3267 vector double) * \
3268 (vector double)(vector unsigned long long)((0x3ffULL - (__b)) \
3269 << 52)))
3270#endif // __VSX__
3271
3272/* vec_vcfsx */
3273
3274#define vec_vcfux __builtin_altivec_vcfux
3275/* vec_vcfux */
3276
3277#define vec_vcfsx(__a, __b) __builtin_altivec_vcfsx((vector int)(__a), (__b))
3278
3279/* vec_cts */
3280
3281#ifdef __VSX__
3282#ifdef __XL_COMPAT_ALTIVEC__
3283#define vec_cts(__a, __b) \
3284 _Generic((__a), vector float \
3285 : (vector signed int)__builtin_altivec_vctsxs((vector float)(__a), \
3286 (__b)), \
3287 vector double \
3288 : __extension__({ \
3289 vector double __ret = \
3290 (vector double)(__a) * \
3291 (vector double)(vector unsigned long long)((0x3ffULL + (__b)) \
3292 << 52); \
3293 (vector signed long long)__builtin_vsx_xvcvdpsxws(__ret); \
3294 }))
3295#else // __XL_COMPAT_ALTIVEC__
3296#define vec_cts(__a, __b) \
3297 _Generic((__a), vector float \
3298 : (vector signed int)__builtin_altivec_vctsxs((vector float)(__a), \
3299 (__b)), \
3300 vector double \
3301 : __extension__({ \
3302 vector double __ret = \
3303 (vector double)(__a) * \
3304 (vector double)(vector unsigned long long)((0x3ffULL + (__b)) \
3305 << 52); \
3306 (vector signed long long)__builtin_convertvector( \
3307 __ret, vector signed long long); \
3308 }))
3309#endif // __XL_COMPAT_ALTIVEC__
3310#else
3311#define vec_cts __builtin_altivec_vctsxs
3312#endif
3313
3314/* vec_vctsxs */
3315
3316#define vec_vctsxs __builtin_altivec_vctsxs
3317
3318/* vec_ctu */
3319
3320#ifdef __VSX__
3321#ifdef __XL_COMPAT_ALTIVEC__
3322#define vec_ctu(__a, __b) \
3323 _Generic((__a), vector float \
3324 : (vector unsigned int)__builtin_altivec_vctuxs( \
3325 (vector float)(__a), (__b)), \
3326 vector double \
3327 : __extension__({ \
3328 vector double __ret = \
3329 (vector double)(__a) * \
3330 (vector double)(vector unsigned long long)((0x3ffULL + __b) \
3331 << 52); \
3332 (vector unsigned long long)__builtin_vsx_xvcvdpuxws(__ret); \
3333 }))
3334#else // __XL_COMPAT_ALTIVEC__
3335#define vec_ctu(__a, __b) \
3336 _Generic((__a), vector float \
3337 : (vector unsigned int)__builtin_altivec_vctuxs( \
3338 (vector float)(__a), (__b)), \
3339 vector double \
3340 : __extension__({ \
3341 vector double __ret = \
3342 (vector double)(__a) * \
3343 (vector double)(vector unsigned long long)((0x3ffULL + __b) \
3344 << 52); \
3345 (vector unsigned long long)__builtin_convertvector( \
3346 __ret, vector unsigned long long); \
3347 }))
3348#endif // __XL_COMPAT_ALTIVEC__
3349#else
3350#define vec_ctu __builtin_altivec_vctuxs
3351#endif
3352
3353#ifdef __LITTLE_ENDIAN__
3354/* vec_ctsl */
3355
3356#ifdef __VSX__
3357#define vec_ctsl(__a, __b) \
3358 _Generic((__a), vector float \
3359 : __extension__({ \
3360 vector float __ret = \
3361 (vector float)(__a) * \
3362 (vector float)(vector unsigned)((0x7f + (__b)) << 23); \
3363 __builtin_vsx_xvcvspsxds( \
3364 __builtin_vsx_xxsldwi(__ret, __ret, 1)); \
3365 }), \
3366 vector double \
3367 : __extension__({ \
3368 vector double __ret = \
3369 (vector double)(__a) * \
3370 (vector double)(vector unsigned long long)((0x3ffULL + __b) \
3371 << 52); \
3372 __builtin_convertvector(__ret, vector signed long long); \
3373 }))
3374
3375/* vec_ctul */
3376
3377#define vec_ctul(__a, __b) \
3378 _Generic((__a), vector float \
3379 : __extension__({ \
3380 vector float __ret = \
3381 (vector float)(__a) * \
3382 (vector float)(vector unsigned)((0x7f + (__b)) << 23); \
3383 __builtin_vsx_xvcvspuxds( \
3384 __builtin_vsx_xxsldwi(__ret, __ret, 1)); \
3385 }), \
3386 vector double \
3387 : __extension__({ \
3388 vector double __ret = \
3389 (vector double)(__a) * \
3390 (vector double)(vector unsigned long long)((0x3ffULL + __b) \
3391 << 52); \
3392 __builtin_convertvector(__ret, vector unsigned long long); \
3393 }))
3394#endif
3395#else // __LITTLE_ENDIAN__
3396/* vec_ctsl */
3397
3398#ifdef __VSX__
3399#define vec_ctsl(__a, __b) \
3400 _Generic((__a), vector float \
3401 : __extension__({ \
3402 vector float __ret = \
3403 (vector float)(__a) * \
3404 (vector float)(vector unsigned)((0x7f + (__b)) << 23); \
3405 __builtin_vsx_xvcvspsxds(__ret); \
3406 }), \
3407 vector double \
3408 : __extension__({ \
3409 vector double __ret = \
3410 (vector double)(__a) * \
3411 (vector double)(vector unsigned long long)((0x3ffULL + __b) \
3412 << 52); \
3413 __builtin_convertvector(__ret, vector signed long long); \
3414 }))
3415
3416/* vec_ctul */
3417
3418#define vec_ctul(__a, __b) \
3419 _Generic((__a), vector float \
3420 : __extension__({ \
3421 vector float __ret = \
3422 (vector float)(__a) * \
3423 (vector float)(vector unsigned)((0x7f + (__b)) << 23); \
3424 __builtin_vsx_xvcvspuxds(__ret); \
3425 }), \
3426 vector double \
3427 : __extension__({ \
3428 vector double __ret = \
3429 (vector double)(__a) * \
3430 (vector double)(vector unsigned long long)((0x3ffULL + __b) \
3431 << 52); \
3432 __builtin_convertvector(__ret, vector unsigned long long); \
3433 }))
3434#endif
3435#endif // __LITTLE_ENDIAN__
3436
3437/* vec_vctuxs */
3438
3439#define vec_vctuxs __builtin_altivec_vctuxs
3440
3441/* vec_signext */
3442
3443#ifdef __POWER9_VECTOR__
3444static __inline__ vector signed int __ATTRS_o_ai
3445vec_signexti(vector signed char __a) {
3446 return __builtin_altivec_vextsb2w(__a);
3447}
3448
3449static __inline__ vector signed int __ATTRS_o_ai
3450vec_signexti(vector signed short __a) {
3451 return __builtin_altivec_vextsh2w(__a);
3452}
3453
3454static __inline__ vector signed long long __ATTRS_o_ai
3455vec_signextll(vector signed char __a) {
3456 return __builtin_altivec_vextsb2d(__a);
3457}
3458
3459static __inline__ vector signed long long __ATTRS_o_ai
3460vec_signextll(vector signed short __a) {
3461 return __builtin_altivec_vextsh2d(__a);
3462}
3463
3464static __inline__ vector signed long long __ATTRS_o_ai
3465vec_signextll(vector signed int __a) {
3466 return __builtin_altivec_vextsw2d(__a);
3467}
3468#endif
3469
3470#if defined(__POWER10_VECTOR__) && defined(__SIZEOF_INT128__)
3471static __inline__ vector signed __int128 __ATTRS_o_ai
3472vec_signextq(vector signed long long __a) {
3473 return __builtin_altivec_vextsd2q(__a);
3474}
3475#endif
3476
3477/* vec_signed */
3478
3479static __inline__ vector signed int __ATTRS_o_ai
3480vec_sld(vector signed int, vector signed int, unsigned const int __c);
3481
3482static __inline__ vector signed int __ATTRS_o_ai
3483vec_signed(vector float __a) {
3484 return __builtin_convertvector(__a, vector signed int);
3485}
3486
3487#ifdef __VSX__
3488static __inline__ vector signed long long __ATTRS_o_ai
3489vec_signed(vector double __a) {
3490 return __builtin_convertvector(__a, vector signed long long);
3491}
3492
3493static __inline__ vector signed int __attribute__((__always_inline__))
3494vec_signed2(vector double __a, vector double __b) {
3495 return (vector signed int) { __a[0], __a[1], __b[0], __b[1] };
3496}
3497
3498static __inline__ vector signed int __ATTRS_o_ai
3499vec_signede(vector double __a) {
3500#ifdef __LITTLE_ENDIAN__
3501 vector signed int __ret = __builtin_vsx_xvcvdpsxws(__a);
3502 return vec_sld(__ret, __ret, 12);
3503#else
3504 return __builtin_vsx_xvcvdpsxws(__a);
3505#endif
3506}
3507
3508static __inline__ vector signed int __ATTRS_o_ai
3509vec_signedo(vector double __a) {
3510#ifdef __LITTLE_ENDIAN__
3511 return __builtin_vsx_xvcvdpsxws(__a);
3512#else
3513 vector signed int __ret = __builtin_vsx_xvcvdpsxws(__a);
3514 return vec_sld(__ret, __ret, 12);
3515#endif
3516}
3517#endif
3518
3519/* vec_unsigned */
3520
3521static __inline__ vector unsigned int __ATTRS_o_ai
3522vec_sld(vector unsigned int, vector unsigned int, unsigned const int __c);
3523
3524static __inline__ vector unsigned int __ATTRS_o_ai
3525vec_unsigned(vector float __a) {
3526 return __builtin_convertvector(__a, vector unsigned int);
3527}
3528
3529#ifdef __VSX__
3530static __inline__ vector unsigned long long __ATTRS_o_ai
3531vec_unsigned(vector double __a) {
3532 return __builtin_convertvector(__a, vector unsigned long long);
3533}
3534
3535static __inline__ vector unsigned int __attribute__((__always_inline__))
3536vec_unsigned2(vector double __a, vector double __b) {
3537 return (vector unsigned int) { __a[0], __a[1], __b[0], __b[1] };
3538}
3539
3540static __inline__ vector unsigned int __ATTRS_o_ai
3541vec_unsignede(vector double __a) {
3542#ifdef __LITTLE_ENDIAN__
3543 vector unsigned int __ret = __builtin_vsx_xvcvdpuxws(__a);
3544 return vec_sld(__ret, __ret, 12);
3545#else
3546 return __builtin_vsx_xvcvdpuxws(__a);
3547#endif
3548}
3549
3550static __inline__ vector unsigned int __ATTRS_o_ai
3551vec_unsignedo(vector double __a) {
3552#ifdef __LITTLE_ENDIAN__
3553 return __builtin_vsx_xvcvdpuxws(__a);
3554#else
3555 vector unsigned int __ret = __builtin_vsx_xvcvdpuxws(__a);
3556 return vec_sld(__ret, __ret, 12);
3557#endif
3558}
3559#endif
3560
3561/* vec_float */
3562
3563static __inline__ vector float __ATTRS_o_ai
3564vec_sld(vector float, vector float, unsigned const int __c);
3565
3566static __inline__ vector float __ATTRS_o_ai
3567vec_float(vector signed int __a) {
3568 return __builtin_convertvector(__a, vector float);
3569}
3570
3571static __inline__ vector float __ATTRS_o_ai
3572vec_float(vector unsigned int __a) {
3573 return __builtin_convertvector(__a, vector float);
3574}
3575
3576#ifdef __VSX__
3577static __inline__ vector float __ATTRS_o_ai
3578vec_float2(vector signed long long __a, vector signed long long __b) {
3579 return (vector float) { __a[0], __a[1], __b[0], __b[1] };
3580}
3581
3582static __inline__ vector float __ATTRS_o_ai
3583vec_float2(vector unsigned long long __a, vector unsigned long long __b) {
3584 return (vector float) { __a[0], __a[1], __b[0], __b[1] };
3585}
3586
3587static __inline__ vector float __ATTRS_o_ai
3588vec_float2(vector double __a, vector double __b) {
3589 return (vector float) { __a[0], __a[1], __b[0], __b[1] };
3590}
3591
3592static __inline__ vector float __ATTRS_o_ai
3593vec_floate(vector signed long long __a) {
3594#ifdef __LITTLE_ENDIAN__
3595 vector float __ret = __builtin_vsx_xvcvsxdsp(__a);
3596 return vec_sld(__ret, __ret, 12);
3597#else
3598 return __builtin_vsx_xvcvsxdsp(__a);
3599#endif
3600}
3601
3602static __inline__ vector float __ATTRS_o_ai
3603vec_floate(vector unsigned long long __a) {
3604#ifdef __LITTLE_ENDIAN__
3605 vector float __ret = __builtin_vsx_xvcvuxdsp(__a);
3606 return vec_sld(__ret, __ret, 12);
3607#else
3608 return __builtin_vsx_xvcvuxdsp(__a);
3609#endif
3610}
3611
3612static __inline__ vector float __ATTRS_o_ai
3613vec_floate(vector double __a) {
3614#ifdef __LITTLE_ENDIAN__
3615 vector float __ret = __builtin_vsx_xvcvdpsp(__a);
3616 return vec_sld(__ret, __ret, 12);
3617#else
3618 return __builtin_vsx_xvcvdpsp(__a);
3619#endif
3620}
3621
3622static __inline__ vector float __ATTRS_o_ai
3623vec_floato(vector signed long long __a) {
3624#ifdef __LITTLE_ENDIAN__
3625 return __builtin_vsx_xvcvsxdsp(__a);
3626#else
3627 vector float __ret = __builtin_vsx_xvcvsxdsp(__a);
3628 return vec_sld(__ret, __ret, 12);
3629#endif
3630}
3631
3632static __inline__ vector float __ATTRS_o_ai
3633vec_floato(vector unsigned long long __a) {
3634#ifdef __LITTLE_ENDIAN__
3635 return __builtin_vsx_xvcvuxdsp(__a);
3636#else
3637 vector float __ret = __builtin_vsx_xvcvuxdsp(__a);
3638 return vec_sld(__ret, __ret, 12);
3639#endif
3640}
3641
3642static __inline__ vector float __ATTRS_o_ai
3643vec_floato(vector double __a) {
3644#ifdef __LITTLE_ENDIAN__
3645 return __builtin_vsx_xvcvdpsp(__a);
3646#else
3647 vector float __ret = __builtin_vsx_xvcvdpsp(__a);
3648 return vec_sld(__ret, __ret, 12);
3649#endif
3650}
3651#endif
3652
3653/* vec_double */
3654
3655#ifdef __VSX__
3656static __inline__ vector double __ATTRS_o_ai
3657vec_double(vector signed long long __a) {
3658 return __builtin_convertvector(__a, vector double);
3659}
3660
3661static __inline__ vector double __ATTRS_o_ai
3662vec_double(vector unsigned long long __a) {
3663 return __builtin_convertvector(__a, vector double);
3664}
3665
3666static __inline__ vector double __ATTRS_o_ai
3667vec_doublee(vector signed int __a) {
3668#ifdef __LITTLE_ENDIAN__
3669 return __builtin_vsx_xvcvsxwdp(vec_sld(__a, __a, 4));
3670#else
3671 return __builtin_vsx_xvcvsxwdp(__a);
3672#endif
3673}
3674
3675static __inline__ vector double __ATTRS_o_ai
3676vec_doublee(vector unsigned int __a) {
3677#ifdef __LITTLE_ENDIAN__
3678 return __builtin_vsx_xvcvuxwdp(vec_sld(__a, __a, 4));
3679#else
3680 return __builtin_vsx_xvcvuxwdp(__a);
3681#endif
3682}
3683
3684static __inline__ vector double __ATTRS_o_ai
3685vec_doublee(vector float __a) {
3686#ifdef __LITTLE_ENDIAN__
3687 return __builtin_vsx_xvcvspdp(vec_sld(__a, __a, 4));
3688#else
3689 return __builtin_vsx_xvcvspdp(__a);
3690#endif
3691}
3692
3693static __inline__ vector double __ATTRS_o_ai
3694vec_doubleh(vector signed int __a) {
3695 vector double __ret = {__a[0], __a[1]};
3696 return __ret;
3697}
3698
3699static __inline__ vector double __ATTRS_o_ai
3700vec_doubleh(vector unsigned int __a) {
3701 vector double __ret = {__a[0], __a[1]};
3702 return __ret;
3703}
3704
3705static __inline__ vector double __ATTRS_o_ai
3706vec_doubleh(vector float __a) {
3707 vector double __ret = {__a[0], __a[1]};
3708 return __ret;
3709}
3710
3711static __inline__ vector double __ATTRS_o_ai
3712vec_doublel(vector signed int __a) {
3713 vector double __ret = {__a[2], __a[3]};
3714 return __ret;
3715}
3716
3717static __inline__ vector double __ATTRS_o_ai
3718vec_doublel(vector unsigned int __a) {
3719 vector double __ret = {__a[2], __a[3]};
3720 return __ret;
3721}
3722
3723static __inline__ vector double __ATTRS_o_ai
3724vec_doublel(vector float __a) {
3725 vector double __ret = {__a[2], __a[3]};
3726 return __ret;
3727}
3728
3729static __inline__ vector double __ATTRS_o_ai
3730vec_doubleo(vector signed int __a) {
3731#ifdef __LITTLE_ENDIAN__
3732 return __builtin_vsx_xvcvsxwdp(__a);
3733#else
3734 return __builtin_vsx_xvcvsxwdp(vec_sld(__a, __a, 4));
3735#endif
3736}
3737
3738static __inline__ vector double __ATTRS_o_ai
3739vec_doubleo(vector unsigned int __a) {
3740#ifdef __LITTLE_ENDIAN__
3741 return __builtin_vsx_xvcvuxwdp(__a);
3742#else
3743 return __builtin_vsx_xvcvuxwdp(vec_sld(__a, __a, 4));
3744#endif
3745}
3746
3747static __inline__ vector double __ATTRS_o_ai
3748vec_doubleo(vector float __a) {
3749#ifdef __LITTLE_ENDIAN__
3750 return __builtin_vsx_xvcvspdp(__a);
3751#else
3752 return __builtin_vsx_xvcvspdp(vec_sld(__a, __a, 4));
3753#endif
3754}
3755
3756/* vec_cvf */
3757static __inline__ vector double __ATTRS_o_ai vec_cvf(vector float __a) {
3758 return vec_doublee(__a);
3759}
3760
3761static __inline__ vector float __ATTRS_o_ai vec_cvf(vector double __a) {
3762 return vec_floate(__a);
3763}
3764#endif
3765
3766/* vec_div */
3767
3768/* Integer vector divides (vectors are scalarized, elements divided
3769 and the vectors reassembled).
3770*/
3771static __inline__ vector signed char __ATTRS_o_ai
3772vec_div(vector signed char __a, vector signed char __b) {
3773 return __a / __b;
3774}
3775
3776static __inline__ vector unsigned char __ATTRS_o_ai
3777vec_div(vector unsigned char __a, vector unsigned char __b) {
3778 return __a / __b;
3779}
3780
3781static __inline__ vector signed short __ATTRS_o_ai
3782vec_div(vector signed short __a, vector signed short __b) {
3783 return __a / __b;
3784}
3785
3786static __inline__ vector unsigned short __ATTRS_o_ai
3787vec_div(vector unsigned short __a, vector unsigned short __b) {
3788 return __a / __b;
3789}
3790
3791static __inline__ vector signed int __ATTRS_o_ai
3792vec_div(vector signed int __a, vector signed int __b) {
3793 return __a / __b;
3794}
3795
3796static __inline__ vector unsigned int __ATTRS_o_ai
3797vec_div(vector unsigned int __a, vector unsigned int __b) {
3798 return __a / __b;
3799}
3800
3801#ifdef __VSX__
3802static __inline__ vector signed long long __ATTRS_o_ai
3803vec_div(vector signed long long __a, vector signed long long __b) {
3804 return __a / __b;
3805}
3806
3807static __inline__ vector unsigned long long __ATTRS_o_ai
3808vec_div(vector unsigned long long __a, vector unsigned long long __b) {
3809 return __a / __b;
3810}
3811
3812static __inline__ vector float __ATTRS_o_ai vec_div(vector float __a,
3813 vector float __b) {
3814 return __a / __b;
3815}
3816
3817static __inline__ vector double __ATTRS_o_ai vec_div(vector double __a,
3818 vector double __b) {
3819 return __a / __b;
3820}
3821#endif
3822
3823/* vec_dive */
3824
3825#ifdef __POWER10_VECTOR__
3826static __inline__ vector signed int __ATTRS_o_ai
3827vec_dive(vector signed int __a, vector signed int __b) {
3828 return __builtin_altivec_vdivesw(__a, __b);
3829}
3830
3831static __inline__ vector unsigned int __ATTRS_o_ai
3832vec_dive(vector unsigned int __a, vector unsigned int __b) {
3833 return __builtin_altivec_vdiveuw(__a, __b);
3834}
3835
3836static __inline__ vector signed long long __ATTRS_o_ai
3837vec_dive(vector signed long long __a, vector signed long long __b) {
3838 return __builtin_altivec_vdivesd(__a, __b);
3839}
3840
3841static __inline__ vector unsigned long long __ATTRS_o_ai
3842vec_dive(vector unsigned long long __a, vector unsigned long long __b) {
3843 return __builtin_altivec_vdiveud(__a, __b);
3844}
3845
3846#ifdef __SIZEOF_INT128__
3847static __inline__ vector unsigned __int128 __ATTRS_o_ai
3848vec_dive(vector unsigned __int128 __a, vector unsigned __int128 __b) {
3849 return __builtin_altivec_vdiveuq(__a, __b);
3850}
3851
3852static __inline__ vector signed __int128 __ATTRS_o_ai
3853vec_dive(vector signed __int128 __a, vector signed __int128 __b) {
3854 return __builtin_altivec_vdivesq(__a, __b);
3855}
3856#endif
3857#endif
3858
3859#if defined(__POWER10_VECTOR__) && defined(__SIZEOF_INT128__)
3860static __inline__ vector unsigned __int128 __ATTRS_o_ai
3861vec_div(vector unsigned __int128 __a, vector unsigned __int128 __b) {
3862 return __a / __b;
3863}
3864
3865static __inline__ vector signed __int128 __ATTRS_o_ai
3866vec_div(vector signed __int128 __a, vector signed __int128 __b) {
3867 return __a / __b;
3868}
3869#endif /* __POWER10_VECTOR__ */
3870
3871/* vec_xvtdiv */
3872
3873#ifdef __VSX__
3874static __inline__ int __ATTRS_o_ai vec_test_swdiv(vector double __a,
3875 vector double __b) {
3876 return __builtin_vsx_xvtdivdp(__a, __b);
3877}
3878
3879static __inline__ int __ATTRS_o_ai vec_test_swdivs(vector float __a,
3880 vector float __b) {
3881 return __builtin_vsx_xvtdivsp(__a, __b);
3882}
3883#endif
3884
3885/* vec_dss */
3886
3887#define vec_dss __builtin_altivec_dss
3888
3889/* vec_dssall */
3890
3891static __inline__ void __attribute__((__always_inline__)) vec_dssall(void) {
3892 __builtin_altivec_dssall();
3893}
3894
3895/* vec_dst */
3896#define vec_dst(__PTR, __CW, __STR) \
3897 __builtin_altivec_dst((const void *)(__PTR), (__CW), (__STR))
3898
3899/* vec_dstst */
3900#define vec_dstst(__PTR, __CW, __STR) \
3901 __builtin_altivec_dstst((const void *)(__PTR), (__CW), (__STR))
3902
3903/* vec_dststt */
3904#define vec_dststt(__PTR, __CW, __STR) \
3905 __builtin_altivec_dststt((const void *)(__PTR), (__CW), (__STR))
3906
3907/* vec_dstt */
3908#define vec_dstt(__PTR, __CW, __STR) \
3909 __builtin_altivec_dstt((const void *)(__PTR), (__CW), (__STR))
3910
3911/* vec_eqv */
3912
3913#ifdef __POWER8_VECTOR__
3914static __inline__ vector signed char __ATTRS_o_ai
3915vec_eqv(vector signed char __a, vector signed char __b) {
3916 return (vector signed char)__builtin_vsx_xxleqv((vector unsigned int)__a,
3917 (vector unsigned int)__b);
3918}
3919
3920static __inline__ vector unsigned char __ATTRS_o_ai
3921vec_eqv(vector unsigned char __a, vector unsigned char __b) {
3922 return (vector unsigned char)__builtin_vsx_xxleqv((vector unsigned int)__a,
3923 (vector unsigned int)__b);
3924}
3925
3926static __inline__ vector bool char __ATTRS_o_ai vec_eqv(vector bool char __a,
3927 vector bool char __b) {
3928 return (vector bool char)__builtin_vsx_xxleqv((vector unsigned int)__a,
3929 (vector unsigned int)__b);
3930}
3931
3932static __inline__ vector signed short __ATTRS_o_ai
3933vec_eqv(vector signed short __a, vector signed short __b) {
3934 return (vector signed short)__builtin_vsx_xxleqv((vector unsigned int)__a,
3935 (vector unsigned int)__b);
3936}
3937
3938static __inline__ vector unsigned short __ATTRS_o_ai
3939vec_eqv(vector unsigned short __a, vector unsigned short __b) {
3940 return (vector unsigned short)__builtin_vsx_xxleqv((vector unsigned int)__a,
3941 (vector unsigned int)__b);
3942}
3943
3944static __inline__ vector bool short __ATTRS_o_ai
3945vec_eqv(vector bool short __a, vector bool short __b) {
3946 return (vector bool short)__builtin_vsx_xxleqv((vector unsigned int)__a,
3947 (vector unsigned int)__b);
3948}
3949
3950static __inline__ vector signed int __ATTRS_o_ai
3951vec_eqv(vector signed int __a, vector signed int __b) {
3952 return (vector signed int)__builtin_vsx_xxleqv((vector unsigned int)__a,
3953 (vector unsigned int)__b);
3954}
3955
3956static __inline__ vector unsigned int __ATTRS_o_ai
3957vec_eqv(vector unsigned int __a, vector unsigned int __b) {
3958 return __builtin_vsx_xxleqv(__a, __b);
3959}
3960
3961static __inline__ vector bool int __ATTRS_o_ai vec_eqv(vector bool int __a,
3962 vector bool int __b) {
3963 return (vector bool int)__builtin_vsx_xxleqv((vector unsigned int)__a,
3964 (vector unsigned int)__b);
3965}
3966
3967static __inline__ vector signed long long __ATTRS_o_ai
3968vec_eqv(vector signed long long __a, vector signed long long __b) {
3969 return (vector signed long long)__builtin_vsx_xxleqv(
3970 (vector unsigned int)__a, (vector unsigned int)__b);
3971}
3972
3973static __inline__ vector unsigned long long __ATTRS_o_ai
3974vec_eqv(vector unsigned long long __a, vector unsigned long long __b) {
3975 return (vector unsigned long long)__builtin_vsx_xxleqv(
3976 (vector unsigned int)__a, (vector unsigned int)__b);
3977}
3978
3979static __inline__ vector bool long long __ATTRS_o_ai
3980vec_eqv(vector bool long long __a, vector bool long long __b) {
3981 return (vector bool long long)__builtin_vsx_xxleqv((vector unsigned int)__a,
3982 (vector unsigned int)__b);
3983}
3984
3985static __inline__ vector float __ATTRS_o_ai vec_eqv(vector float __a,
3986 vector float __b) {
3987 return (vector float)__builtin_vsx_xxleqv((vector unsigned int)__a,
3988 (vector unsigned int)__b);
3989}
3990
3991static __inline__ vector double __ATTRS_o_ai vec_eqv(vector double __a,
3992 vector double __b) {
3993 return (vector double)__builtin_vsx_xxleqv((vector unsigned int)__a,
3994 (vector unsigned int)__b);
3995}
3996#endif
3997
3998/* vec_expte */
3999
4000static __inline__ vector float __attribute__((__always_inline__))
4001vec_expte(vector float __a) {
4002 return __builtin_altivec_vexptefp(__a);
4003}
4004
4005/* vec_vexptefp */
4006
4007static __inline__ vector float __attribute__((__always_inline__))
4008vec_vexptefp(vector float __a) {
4009 return __builtin_altivec_vexptefp(__a);
4010}
4011
4012/* vec_floor */
4013
4014static __inline__ vector float __ATTRS_o_ai vec_floor(vector float __a) {
4015#ifdef __VSX__
4016 return __builtin_vsx_xvrspim(__a);
4017#else
4018 return __builtin_altivec_vrfim(__a);
4019#endif
4020}
4021
4022#ifdef __VSX__
4023static __inline__ vector double __ATTRS_o_ai vec_floor(vector double __a) {
4024 return __builtin_vsx_xvrdpim(__a);
4025}
4026#endif
4027
4028/* vec_roundm */
4029static __inline__ vector float __ATTRS_o_ai vec_roundm(vector float __a) {
4030 return vec_floor(__a);
4031}
4032
4033#ifdef __VSX__
4034static __inline__ vector double __ATTRS_o_ai vec_roundm(vector double __a) {
4035 return vec_floor(__a);
4036}
4037#endif
4038
4039/* vec_vrfim */
4040
4041static __inline__ vector float __attribute__((__always_inline__))
4042vec_vrfim(vector float __a) {
4043 return __builtin_altivec_vrfim(__a);
4044}
4045
4046/* vec_ld */
4047
4048static __inline__ vector signed char __ATTRS_o_ai
4049vec_ld(long __a, const vector signed char *__b) {
4050 return (vector signed char)__builtin_altivec_lvx(__a, __b);
4051}
4052
4053static __inline__ vector signed char __ATTRS_o_ai
4054vec_ld(long __a, const signed char *__b) {
4055 return (vector signed char)__builtin_altivec_lvx(__a, __b);
4056}
4057
4058static __inline__ vector unsigned char __ATTRS_o_ai
4059vec_ld(long __a, const vector unsigned char *__b) {
4060 return (vector unsigned char)__builtin_altivec_lvx(__a, __b);
4061}
4062
4063static __inline__ vector unsigned char __ATTRS_o_ai
4064vec_ld(long __a, const unsigned char *__b) {
4065 return (vector unsigned char)__builtin_altivec_lvx(__a, __b);
4066}
4067
4068static __inline__ vector bool char __ATTRS_o_ai
4069vec_ld(long __a, const vector bool char *__b) {
4070 return (vector bool char)__builtin_altivec_lvx(__a, __b);
4071}
4072
4073static __inline__ vector short __ATTRS_o_ai vec_ld(long __a,
4074 const vector short *__b) {
4075 return (vector short)__builtin_altivec_lvx(__a, __b);
4076}
4077
4078static __inline__ vector short __ATTRS_o_ai vec_ld(long __a, const short *__b) {
4079 return (vector short)__builtin_altivec_lvx(__a, __b);
4080}
4081
4082static __inline__ vector unsigned short __ATTRS_o_ai
4083vec_ld(long __a, const vector unsigned short *__b) {
4084 return (vector unsigned short)__builtin_altivec_lvx(__a, __b);
4085}
4086
4087static __inline__ vector unsigned short __ATTRS_o_ai
4088vec_ld(long __a, const unsigned short *__b) {
4089 return (vector unsigned short)__builtin_altivec_lvx(__a, __b);
4090}
4091
4092static __inline__ vector bool short __ATTRS_o_ai
4093vec_ld(long __a, const vector bool short *__b) {
4094 return (vector bool short)__builtin_altivec_lvx(__a, __b);
4095}
4096
4097static __inline__ vector pixel __ATTRS_o_ai vec_ld(long __a,
4098 const vector pixel *__b) {
4099 return (vector pixel)__builtin_altivec_lvx(__a, __b);
4100}
4101
4102static __inline__ vector int __ATTRS_o_ai vec_ld(long __a,
4103 const vector int *__b) {
4104 return (vector int)__builtin_altivec_lvx(__a, __b);
4105}
4106
4107static __inline__ vector int __ATTRS_o_ai vec_ld(long __a, const int *__b) {
4108 return (vector int)__builtin_altivec_lvx(__a, __b);
4109}
4110
4111static __inline__ vector unsigned int __ATTRS_o_ai
4112vec_ld(long __a, const vector unsigned int *__b) {
4113 return (vector unsigned int)__builtin_altivec_lvx(__a, __b);
4114}
4115
4116static __inline__ vector unsigned int __ATTRS_o_ai
4117vec_ld(long __a, const unsigned int *__b) {
4118 return (vector unsigned int)__builtin_altivec_lvx(__a, __b);
4119}
4120
4121static __inline__ vector bool int __ATTRS_o_ai
4122vec_ld(long __a, const vector bool int *__b) {
4123 return (vector bool int)__builtin_altivec_lvx(__a, __b);
4124}
4125
4126static __inline__ vector float __ATTRS_o_ai vec_ld(long __a,
4127 const vector float *__b) {
4128 return (vector float)__builtin_altivec_lvx(__a, __b);
4129}
4130
4131static __inline__ vector float __ATTRS_o_ai vec_ld(long __a, const float *__b) {
4132 return (vector float)__builtin_altivec_lvx(__a, __b);
4133}
4134
4135/* vec_lvx */
4136
4137static __inline__ vector signed char __ATTRS_o_ai
4138vec_lvx(long __a, const vector signed char *__b) {
4139 return (vector signed char)__builtin_altivec_lvx(__a, __b);
4140}
4141
4142static __inline__ vector signed char __ATTRS_o_ai
4143vec_lvx(long __a, const signed char *__b) {
4144 return (vector signed char)__builtin_altivec_lvx(__a, __b);
4145}
4146
4147static __inline__ vector unsigned char __ATTRS_o_ai
4148vec_lvx(long __a, const vector unsigned char *__b) {
4149 return (vector unsigned char)__builtin_altivec_lvx(__a, __b);
4150}
4151
4152static __inline__ vector unsigned char __ATTRS_o_ai
4153vec_lvx(long __a, const unsigned char *__b) {
4154 return (vector unsigned char)__builtin_altivec_lvx(__a, __b);
4155}
4156
4157static __inline__ vector bool char __ATTRS_o_ai
4158vec_lvx(long __a, const vector bool char *__b) {
4159 return (vector bool char)__builtin_altivec_lvx(__a, __b);
4160}
4161
4162static __inline__ vector short __ATTRS_o_ai vec_lvx(long __a,
4163 const vector short *__b) {
4164 return (vector short)__builtin_altivec_lvx(__a, __b);
4165}
4166
4167static __inline__ vector short __ATTRS_o_ai vec_lvx(long __a, const short *__b) {
4168 return (vector short)__builtin_altivec_lvx(__a, __b);
4169}
4170
4171static __inline__ vector unsigned short __ATTRS_o_ai
4172vec_lvx(long __a, const vector unsigned short *__b) {
4173 return (vector unsigned short)__builtin_altivec_lvx(__a, __b);
4174}
4175
4176static __inline__ vector unsigned short __ATTRS_o_ai
4177vec_lvx(long __a, const unsigned short *__b) {
4178 return (vector unsigned short)__builtin_altivec_lvx(__a, __b);
4179}
4180
4181static __inline__ vector bool short __ATTRS_o_ai
4182vec_lvx(long __a, const vector bool short *__b) {
4183 return (vector bool short)__builtin_altivec_lvx(__a, __b);
4184}
4185
4186static __inline__ vector pixel __ATTRS_o_ai vec_lvx(long __a,
4187 const vector pixel *__b) {
4188 return (vector pixel)__builtin_altivec_lvx(__a, __b);
4189}
4190
4191static __inline__ vector int __ATTRS_o_ai vec_lvx(long __a,
4192 const vector int *__b) {
4193 return (vector int)__builtin_altivec_lvx(__a, __b);
4194}
4195
4196static __inline__ vector int __ATTRS_o_ai vec_lvx(long __a, const int *__b) {
4197 return (vector int)__builtin_altivec_lvx(__a, __b);
4198}
4199
4200static __inline__ vector unsigned int __ATTRS_o_ai
4201vec_lvx(long __a, const vector unsigned int *__b) {
4202 return (vector unsigned int)__builtin_altivec_lvx(__a, __b);
4203}
4204
4205static __inline__ vector unsigned int __ATTRS_o_ai
4206vec_lvx(long __a, const unsigned int *__b) {
4207 return (vector unsigned int)__builtin_altivec_lvx(__a, __b);
4208}
4209
4210static __inline__ vector bool int __ATTRS_o_ai
4211vec_lvx(long __a, const vector bool int *__b) {
4212 return (vector bool int)__builtin_altivec_lvx(__a, __b);
4213}
4214
4215static __inline__ vector float __ATTRS_o_ai vec_lvx(long __a,
4216 const vector float *__b) {
4217 return (vector float)__builtin_altivec_lvx(__a, __b);
4218}
4219
4220static __inline__ vector float __ATTRS_o_ai vec_lvx(long __a, const float *__b) {
4221 return (vector float)__builtin_altivec_lvx(__a, __b);
4222}
4223
4224/* vec_lde */
4225
4226static __inline__ vector signed char __ATTRS_o_ai
4227vec_lde(long __a, const signed char *__b) {
4228 return (vector signed char)__builtin_altivec_lvebx(__a, __b);
4229}
4230
4231static __inline__ vector unsigned char __ATTRS_o_ai
4232vec_lde(long __a, const unsigned char *__b) {
4233 return (vector unsigned char)__builtin_altivec_lvebx(__a, __b);
4234}
4235
4236static __inline__ vector short __ATTRS_o_ai vec_lde(long __a, const short *__b) {
4237 return (vector short)__builtin_altivec_lvehx(__a, __b);
4238}
4239
4240static __inline__ vector unsigned short __ATTRS_o_ai
4241vec_lde(long __a, const unsigned short *__b) {
4242 return (vector unsigned short)__builtin_altivec_lvehx(__a, __b);
4243}
4244
4245static __inline__ vector int __ATTRS_o_ai vec_lde(long __a, const int *__b) {
4246 return (vector int)__builtin_altivec_lvewx(__a, __b);
4247}
4248
4249static __inline__ vector unsigned int __ATTRS_o_ai
4250vec_lde(long __a, const unsigned int *__b) {
4251 return (vector unsigned int)__builtin_altivec_lvewx(__a, __b);
4252}
4253
4254static __inline__ vector float __ATTRS_o_ai vec_lde(long __a, const float *__b) {
4255 return (vector float)__builtin_altivec_lvewx(__a, __b);
4256}
4257
4258/* vec_lvebx */
4259
4260static __inline__ vector signed char __ATTRS_o_ai
4261vec_lvebx(long __a, const signed char *__b) {
4262 return (vector signed char)__builtin_altivec_lvebx(__a, __b);
4263}
4264
4265static __inline__ vector unsigned char __ATTRS_o_ai
4266vec_lvebx(long __a, const unsigned char *__b) {
4267 return (vector unsigned char)__builtin_altivec_lvebx(__a, __b);
4268}
4269
4270/* vec_lvehx */
4271
4272static __inline__ vector short __ATTRS_o_ai vec_lvehx(long __a,
4273 const short *__b) {
4274 return (vector short)__builtin_altivec_lvehx(__a, __b);
4275}
4276
4277static __inline__ vector unsigned short __ATTRS_o_ai
4278vec_lvehx(long __a, const unsigned short *__b) {
4279 return (vector unsigned short)__builtin_altivec_lvehx(__a, __b);
4280}
4281
4282/* vec_lvewx */
4283
4284static __inline__ vector int __ATTRS_o_ai vec_lvewx(long __a, const int *__b) {
4285 return (vector int)__builtin_altivec_lvewx(__a, __b);
4286}
4287
4288static __inline__ vector unsigned int __ATTRS_o_ai
4289vec_lvewx(long __a, const unsigned int *__b) {
4290 return (vector unsigned int)__builtin_altivec_lvewx(__a, __b);
4291}
4292
4293static __inline__ vector float __ATTRS_o_ai vec_lvewx(long __a,
4294 const float *__b) {
4295 return (vector float)__builtin_altivec_lvewx(__a, __b);
4296}
4297
4298/* vec_ldl */
4299
4300static __inline__ vector signed char __ATTRS_o_ai
4301vec_ldl(long __a, const vector signed char *__b) {
4302 return (vector signed char)__builtin_altivec_lvxl(__a, __b);
4303}
4304
4305static __inline__ vector signed char __ATTRS_o_ai
4306vec_ldl(long __a, const signed char *__b) {
4307 return (vector signed char)__builtin_altivec_lvxl(__a, __b);
4308}
4309
4310static __inline__ vector unsigned char __ATTRS_o_ai
4311vec_ldl(long __a, const vector unsigned char *__b) {
4312 return (vector unsigned char)__builtin_altivec_lvxl(__a, __b);
4313}
4314
4315static __inline__ vector unsigned char __ATTRS_o_ai
4316vec_ldl(long __a, const unsigned char *__b) {
4317 return (vector unsigned char)__builtin_altivec_lvxl(__a, __b);
4318}
4319
4320static __inline__ vector bool char __ATTRS_o_ai
4321vec_ldl(long __a, const vector bool char *__b) {
4322 return (vector bool char)__builtin_altivec_lvxl(__a, __b);
4323}
4324
4325static __inline__ vector short __ATTRS_o_ai vec_ldl(long __a,
4326 const vector short *__b) {
4327 return (vector short)__builtin_altivec_lvxl(__a, __b);
4328}
4329
4330static __inline__ vector short __ATTRS_o_ai vec_ldl(long __a, const short *__b) {
4331 return (vector short)__builtin_altivec_lvxl(__a, __b);
4332}
4333
4334static __inline__ vector unsigned short __ATTRS_o_ai
4335vec_ldl(long __a, const vector unsigned short *__b) {
4336 return (vector unsigned short)__builtin_altivec_lvxl(__a, __b);
4337}
4338
4339static __inline__ vector unsigned short __ATTRS_o_ai
4340vec_ldl(long __a, const unsigned short *__b) {
4341 return (vector unsigned short)__builtin_altivec_lvxl(__a, __b);
4342}
4343
4344static __inline__ vector bool short __ATTRS_o_ai
4345vec_ldl(long __a, const vector bool short *__b) {
4346 return (vector bool short)__builtin_altivec_lvxl(__a, __b);
4347}
4348
4349static __inline__ vector pixel __ATTRS_o_ai vec_ldl(long __a,
4350 const vector pixel *__b) {
4351 return (vector pixel short)__builtin_altivec_lvxl(__a, __b);
4352}
4353
4354static __inline__ vector int __ATTRS_o_ai vec_ldl(long __a,
4355 const vector int *__b) {
4356 return (vector int)__builtin_altivec_lvxl(__a, __b);
4357}
4358
4359static __inline__ vector int __ATTRS_o_ai vec_ldl(long __a, const int *__b) {
4360 return (vector int)__builtin_altivec_lvxl(__a, __b);
4361}
4362
4363static __inline__ vector unsigned int __ATTRS_o_ai
4364vec_ldl(long __a, const vector unsigned int *__b) {
4365 return (vector unsigned int)__builtin_altivec_lvxl(__a, __b);
4366}
4367
4368static __inline__ vector unsigned int __ATTRS_o_ai
4369vec_ldl(long __a, const unsigned int *__b) {
4370 return (vector unsigned int)__builtin_altivec_lvxl(__a, __b);
4371}
4372
4373static __inline__ vector bool int __ATTRS_o_ai
4374vec_ldl(long __a, const vector bool int *__b) {
4375 return (vector bool int)__builtin_altivec_lvxl(__a, __b);
4376}
4377
4378static __inline__ vector float __ATTRS_o_ai vec_ldl(long __a,
4379 const vector float *__b) {
4380 return (vector float)__builtin_altivec_lvxl(__a, __b);
4381}
4382
4383static __inline__ vector float __ATTRS_o_ai vec_ldl(long __a, const float *__b) {
4384 return (vector float)__builtin_altivec_lvxl(__a, __b);
4385}
4386
4387/* vec_lvxl */
4388
4389static __inline__ vector signed char __ATTRS_o_ai
4390vec_lvxl(long __a, const vector signed char *__b) {
4391 return (vector signed char)__builtin_altivec_lvxl(__a, __b);
4392}
4393
4394static __inline__ vector signed char __ATTRS_o_ai
4395vec_lvxl(long __a, const signed char *__b) {
4396 return (vector signed char)__builtin_altivec_lvxl(__a, __b);
4397}
4398
4399static __inline__ vector unsigned char __ATTRS_o_ai
4400vec_lvxl(long __a, const vector unsigned char *__b) {
4401 return (vector unsigned char)__builtin_altivec_lvxl(__a, __b);
4402}
4403
4404static __inline__ vector unsigned char __ATTRS_o_ai
4405vec_lvxl(long __a, const unsigned char *__b) {
4406 return (vector unsigned char)__builtin_altivec_lvxl(__a, __b);
4407}
4408
4409static __inline__ vector bool char __ATTRS_o_ai
4410vec_lvxl(long __a, const vector bool char *__b) {
4411 return (vector bool char)__builtin_altivec_lvxl(__a, __b);
4412}
4413
4414static __inline__ vector short __ATTRS_o_ai vec_lvxl(long __a,
4415 const vector short *__b) {
4416 return (vector short)__builtin_altivec_lvxl(__a, __b);
4417}
4418
4419static __inline__ vector short __ATTRS_o_ai vec_lvxl(long __a,
4420 const short *__b) {
4421 return (vector short)__builtin_altivec_lvxl(__a, __b);
4422}
4423
4424static __inline__ vector unsigned short __ATTRS_o_ai
4425vec_lvxl(long __a, const vector unsigned short *__b) {
4426 return (vector unsigned short)__builtin_altivec_lvxl(__a, __b);
4427}
4428
4429static __inline__ vector unsigned short __ATTRS_o_ai
4430vec_lvxl(long __a, const unsigned short *__b) {
4431 return (vector unsigned short)__builtin_altivec_lvxl(__a, __b);
4432}
4433
4434static __inline__ vector bool short __ATTRS_o_ai
4435vec_lvxl(long __a, const vector bool short *__b) {
4436 return (vector bool short)__builtin_altivec_lvxl(__a, __b);
4437}
4438
4439static __inline__ vector pixel __ATTRS_o_ai vec_lvxl(long __a,
4440 const vector pixel *__b) {
4441 return (vector pixel)__builtin_altivec_lvxl(__a, __b);
4442}
4443
4444static __inline__ vector int __ATTRS_o_ai vec_lvxl(long __a,
4445 const vector int *__b) {
4446 return (vector int)__builtin_altivec_lvxl(__a, __b);
4447}
4448
4449static __inline__ vector int __ATTRS_o_ai vec_lvxl(long __a, const int *__b) {
4450 return (vector int)__builtin_altivec_lvxl(__a, __b);
4451}
4452
4453static __inline__ vector unsigned int __ATTRS_o_ai
4454vec_lvxl(long __a, const vector unsigned int *__b) {
4455 return (vector unsigned int)__builtin_altivec_lvxl(__a, __b);
4456}
4457
4458static __inline__ vector unsigned int __ATTRS_o_ai
4459vec_lvxl(long __a, const unsigned int *__b) {
4460 return (vector unsigned int)__builtin_altivec_lvxl(__a, __b);
4461}
4462
4463static __inline__ vector bool int __ATTRS_o_ai
4464vec_lvxl(long __a, const vector bool int *__b) {
4465 return (vector bool int)__builtin_altivec_lvxl(__a, __b);
4466}
4467
4468static __inline__ vector float __ATTRS_o_ai vec_lvxl(long __a,
4469 const vector float *__b) {
4470 return (vector float)__builtin_altivec_lvxl(__a, __b);
4471}
4472
4473static __inline__ vector float __ATTRS_o_ai vec_lvxl(long __a,
4474 const float *__b) {
4475 return (vector float)__builtin_altivec_lvxl(__a, __b);
4476}
4477
4478/* vec_loge */
4479
4480static __inline__ vector float __attribute__((__always_inline__))
4481vec_loge(vector float __a) {
4482 return __builtin_altivec_vlogefp(__a);
4483}
4484
4485/* vec_vlogefp */
4486
4487static __inline__ vector float __attribute__((__always_inline__))
4488vec_vlogefp(vector float __a) {
4489 return __builtin_altivec_vlogefp(__a);
4490}
4491
4492/* vec_lvsl */
4493
4494#ifdef __LITTLE_ENDIAN__
4495static __inline__ vector unsigned char __ATTRS_o_ai
4496 __attribute__((__deprecated__("use assignment for unaligned little endian \
4497loads/stores"))) vec_lvsl(int __a, const signed char *__b) {
4498 vector unsigned char mask =
4499 (vector unsigned char)__builtin_altivec_lvsl(__a, __b);
4500 vector unsigned char reverse = {15, 14, 13, 12, 11, 10, 9, 8,
4501 7, 6, 5, 4, 3, 2, 1, 0};
4502 return vec_perm(mask, mask, reverse);
4503}
4504#else
4505static __inline__ vector unsigned char __ATTRS_o_ai
4506vec_lvsl(int __a, const signed char *__b) {
4507 return (vector unsigned char)__builtin_altivec_lvsl(__a, __b);
4508}
4509#endif
4510
4511#ifdef __LITTLE_ENDIAN__
4512static __inline__ vector unsigned char __ATTRS_o_ai
4513 __attribute__((__deprecated__("use assignment for unaligned little endian \
4514loads/stores"))) vec_lvsl(int __a, const unsigned char *__b) {
4515 vector unsigned char mask =
4516 (vector unsigned char)__builtin_altivec_lvsl(__a, __b);
4517 vector unsigned char reverse = {15, 14, 13, 12, 11, 10, 9, 8,
4518 7, 6, 5, 4, 3, 2, 1, 0};
4519 return vec_perm(mask, mask, reverse);
4520}
4521#else
4522static __inline__ vector unsigned char __ATTRS_o_ai
4523vec_lvsl(int __a, const unsigned char *__b) {
4524 return (vector unsigned char)__builtin_altivec_lvsl(__a, __b);
4525}
4526#endif
4527
4528#ifdef __LITTLE_ENDIAN__
4529static __inline__ vector unsigned char __ATTRS_o_ai
4530 __attribute__((__deprecated__("use assignment for unaligned little endian \
4531loads/stores"))) vec_lvsl(int __a, const short *__b) {
4532 vector unsigned char mask =
4533 (vector unsigned char)__builtin_altivec_lvsl(__a, __b);
4534 vector unsigned char reverse = {15, 14, 13, 12, 11, 10, 9, 8,
4535 7, 6, 5, 4, 3, 2, 1, 0};
4536 return vec_perm(mask, mask, reverse);
4537}
4538#else
4539static __inline__ vector unsigned char __ATTRS_o_ai vec_lvsl(int __a,
4540 const short *__b) {
4541 return (vector unsigned char)__builtin_altivec_lvsl(__a, __b);
4542}
4543#endif
4544
4545#ifdef __LITTLE_ENDIAN__
4546static __inline__ vector unsigned char __ATTRS_o_ai
4547 __attribute__((__deprecated__("use assignment for unaligned little endian \
4548loads/stores"))) vec_lvsl(int __a, const unsigned short *__b) {
4549 vector unsigned char mask =
4550 (vector unsigned char)__builtin_altivec_lvsl(__a, __b);
4551 vector unsigned char reverse = {15, 14, 13, 12, 11, 10, 9, 8,
4552 7, 6, 5, 4, 3, 2, 1, 0};
4553 return vec_perm(mask, mask, reverse);
4554}
4555#else
4556static __inline__ vector unsigned char __ATTRS_o_ai
4557vec_lvsl(int __a, const unsigned short *__b) {
4558 return (vector unsigned char)__builtin_altivec_lvsl(__a, __b);
4559}
4560#endif
4561
4562#ifdef __LITTLE_ENDIAN__
4563static __inline__ vector unsigned char __ATTRS_o_ai
4564 __attribute__((__deprecated__("use assignment for unaligned little endian \
4565loads/stores"))) vec_lvsl(int __a, const int *__b) {
4566 vector unsigned char mask =
4567 (vector unsigned char)__builtin_altivec_lvsl(__a, __b);
4568 vector unsigned char reverse = {15, 14, 13, 12, 11, 10, 9, 8,
4569 7, 6, 5, 4, 3, 2, 1, 0};
4570 return vec_perm(mask, mask, reverse);
4571}
4572#else
4573static __inline__ vector unsigned char __ATTRS_o_ai vec_lvsl(int __a,
4574 const int *__b) {
4575 return (vector unsigned char)__builtin_altivec_lvsl(__a, __b);
4576}
4577#endif
4578
4579#ifdef __LITTLE_ENDIAN__
4580static __inline__ vector unsigned char __ATTRS_o_ai
4581 __attribute__((__deprecated__("use assignment for unaligned little endian \
4582loads/stores"))) vec_lvsl(int __a, const unsigned int *__b) {
4583 vector unsigned char mask =
4584 (vector unsigned char)__builtin_altivec_lvsl(__a, __b);
4585 vector unsigned char reverse = {15, 14, 13, 12, 11, 10, 9, 8,
4586 7, 6, 5, 4, 3, 2, 1, 0};
4587 return vec_perm(mask, mask, reverse);
4588}
4589#else
4590static __inline__ vector unsigned char __ATTRS_o_ai
4591vec_lvsl(int __a, const unsigned int *__b) {
4592 return (vector unsigned char)__builtin_altivec_lvsl(__a, __b);
4593}
4594#endif
4595
4596#ifdef __LITTLE_ENDIAN__
4597static __inline__ vector unsigned char __ATTRS_o_ai
4598 __attribute__((__deprecated__("use assignment for unaligned little endian \
4599loads/stores"))) vec_lvsl(int __a, const float *__b) {
4600 vector unsigned char mask =
4601 (vector unsigned char)__builtin_altivec_lvsl(__a, __b);
4602 vector unsigned char reverse = {15, 14, 13, 12, 11, 10, 9, 8,
4603 7, 6, 5, 4, 3, 2, 1, 0};
4604 return vec_perm(mask, mask, reverse);
4605}
4606#else
4607static __inline__ vector unsigned char __ATTRS_o_ai vec_lvsl(int __a,
4608 const float *__b) {
4609 return (vector unsigned char)__builtin_altivec_lvsl(__a, __b);
4610}
4611#endif
4612
4613/* vec_lvsr */
4614
4615#ifdef __LITTLE_ENDIAN__
4616static __inline__ vector unsigned char __ATTRS_o_ai
4617 __attribute__((__deprecated__("use assignment for unaligned little endian \
4618loads/stores"))) vec_lvsr(int __a, const signed char *__b) {
4619 vector unsigned char mask =
4620 (vector unsigned char)__builtin_altivec_lvsr(__a, __b);
4621 vector unsigned char reverse = {15, 14, 13, 12, 11, 10, 9, 8,
4622 7, 6, 5, 4, 3, 2, 1, 0};
4623 return vec_perm(mask, mask, reverse);
4624}
4625#else
4626static __inline__ vector unsigned char __ATTRS_o_ai
4627vec_lvsr(int __a, const signed char *__b) {
4628 return (vector unsigned char)__builtin_altivec_lvsr(__a, __b);
4629}
4630#endif
4631
4632#ifdef __LITTLE_ENDIAN__
4633static __inline__ vector unsigned char __ATTRS_o_ai
4634 __attribute__((__deprecated__("use assignment for unaligned little endian \
4635loads/stores"))) vec_lvsr(int __a, const unsigned char *__b) {
4636 vector unsigned char mask =
4637 (vector unsigned char)__builtin_altivec_lvsr(__a, __b);
4638 vector unsigned char reverse = {15, 14, 13, 12, 11, 10, 9, 8,
4639 7, 6, 5, 4, 3, 2, 1, 0};
4640 return vec_perm(mask, mask, reverse);
4641}
4642#else
4643static __inline__ vector unsigned char __ATTRS_o_ai
4644vec_lvsr(int __a, const unsigned char *__b) {
4645 return (vector unsigned char)__builtin_altivec_lvsr(__a, __b);
4646}
4647#endif
4648
4649#ifdef __LITTLE_ENDIAN__
4650static __inline__ vector unsigned char __ATTRS_o_ai
4651 __attribute__((__deprecated__("use assignment for unaligned little endian \
4652loads/stores"))) vec_lvsr(int __a, const short *__b) {
4653 vector unsigned char mask =
4654 (vector unsigned char)__builtin_altivec_lvsr(__a, __b);
4655 vector unsigned char reverse = {15, 14, 13, 12, 11, 10, 9, 8,
4656 7, 6, 5, 4, 3, 2, 1, 0};
4657 return vec_perm(mask, mask, reverse);
4658}
4659#else
4660static __inline__ vector unsigned char __ATTRS_o_ai vec_lvsr(int __a,
4661 const short *__b) {
4662 return (vector unsigned char)__builtin_altivec_lvsr(__a, __b);
4663}
4664#endif
4665
4666#ifdef __LITTLE_ENDIAN__
4667static __inline__ vector unsigned char __ATTRS_o_ai
4668 __attribute__((__deprecated__("use assignment for unaligned little endian \
4669loads/stores"))) vec_lvsr(int __a, const unsigned short *__b) {
4670 vector unsigned char mask =
4671 (vector unsigned char)__builtin_altivec_lvsr(__a, __b);
4672 vector unsigned char reverse = {15, 14, 13, 12, 11, 10, 9, 8,
4673 7, 6, 5, 4, 3, 2, 1, 0};
4674 return vec_perm(mask, mask, reverse);
4675}
4676#else
4677static __inline__ vector unsigned char __ATTRS_o_ai
4678vec_lvsr(int __a, const unsigned short *__b) {
4679 return (vector unsigned char)__builtin_altivec_lvsr(__a, __b);
4680}
4681#endif
4682
4683#ifdef __LITTLE_ENDIAN__
4684static __inline__ vector unsigned char __ATTRS_o_ai
4685 __attribute__((__deprecated__("use assignment for unaligned little endian \
4686loads/stores"))) vec_lvsr(int __a, const int *__b) {
4687 vector unsigned char mask =
4688 (vector unsigned char)__builtin_altivec_lvsr(__a, __b);
4689 vector unsigned char reverse = {15, 14, 13, 12, 11, 10, 9, 8,
4690 7, 6, 5, 4, 3, 2, 1, 0};
4691 return vec_perm(mask, mask, reverse);
4692}
4693#else
4694static __inline__ vector unsigned char __ATTRS_o_ai vec_lvsr(int __a,
4695 const int *__b) {
4696 return (vector unsigned char)__builtin_altivec_lvsr(__a, __b);
4697}
4698#endif
4699
4700#ifdef __LITTLE_ENDIAN__
4701static __inline__ vector unsigned char __ATTRS_o_ai
4702 __attribute__((__deprecated__("use assignment for unaligned little endian \
4703loads/stores"))) vec_lvsr(int __a, const unsigned int *__b) {
4704 vector unsigned char mask =
4705 (vector unsigned char)__builtin_altivec_lvsr(__a, __b);
4706 vector unsigned char reverse = {15, 14, 13, 12, 11, 10, 9, 8,
4707 7, 6, 5, 4, 3, 2, 1, 0};
4708 return vec_perm(mask, mask, reverse);
4709}
4710#else
4711static __inline__ vector unsigned char __ATTRS_o_ai
4712vec_lvsr(int __a, const unsigned int *__b) {
4713 return (vector unsigned char)__builtin_altivec_lvsr(__a, __b);
4714}
4715#endif
4716
4717#ifdef __LITTLE_ENDIAN__
4718static __inline__ vector unsigned char __ATTRS_o_ai
4719 __attribute__((__deprecated__("use assignment for unaligned little endian \
4720loads/stores"))) vec_lvsr(int __a, const float *__b) {
4721 vector unsigned char mask =
4722 (vector unsigned char)__builtin_altivec_lvsr(__a, __b);
4723 vector unsigned char reverse = {15, 14, 13, 12, 11, 10, 9, 8,
4724 7, 6, 5, 4, 3, 2, 1, 0};
4725 return vec_perm(mask, mask, reverse);
4726}
4727#else
4728static __inline__ vector unsigned char __ATTRS_o_ai vec_lvsr(int __a,
4729 const float *__b) {
4730 return (vector unsigned char)__builtin_altivec_lvsr(__a, __b);
4731}
4732#endif
4733
4734/* vec_madd */
4735static __inline__ vector signed short __ATTRS_o_ai
4736vec_mladd(vector signed short, vector signed short, vector signed short);
4737static __inline__ vector signed short __ATTRS_o_ai
4738vec_mladd(vector signed short, vector unsigned short, vector unsigned short);
4739static __inline__ vector signed short __ATTRS_o_ai
4740vec_mladd(vector unsigned short, vector signed short, vector signed short);
4741static __inline__ vector unsigned short __ATTRS_o_ai
4742vec_mladd(vector unsigned short, vector unsigned short, vector unsigned short);
4743
4744static __inline__ vector signed short __ATTRS_o_ai vec_madd(
4745 vector signed short __a, vector signed short __b, vector signed short __c) {
4746 return vec_mladd(__a, __b, __c);
4747}
4748
4749static __inline__ vector signed short __ATTRS_o_ai
4750vec_madd(vector signed short __a, vector unsigned short __b,
4751 vector unsigned short __c) {
4752 return vec_mladd(__a, __b, __c);
4753}
4754
4755static __inline__ vector signed short __ATTRS_o_ai
4756vec_madd(vector unsigned short __a, vector signed short __b,
4757 vector signed short __c) {
4758 return vec_mladd(__a, __b, __c);
4759}
4760
4761static __inline__ vector unsigned short __ATTRS_o_ai
4762vec_madd(vector unsigned short __a, vector unsigned short __b,
4763 vector unsigned short __c) {
4764 return vec_mladd(__a, __b, __c);
4765}
4766
4767static __inline__ vector float __ATTRS_o_ai vec_madd(vector float __a,
4768 vector float __b,
4769 vector float __c) {
4770#ifdef __VSX__
4771 return __builtin_vsx_xvmaddasp(__a, __b, __c);
4772#else
4773 return __builtin_altivec_vmaddfp(__a, __b, __c);
4774#endif
4775}
4776
4777#ifdef __VSX__
4778static __inline__ vector double __ATTRS_o_ai vec_madd(vector double __a,
4779 vector double __b,
4780 vector double __c) {
4781 return __builtin_vsx_xvmaddadp(__a, __b, __c);
4782}
4783#endif
4784
4785/* vec_vmaddfp */
4786
4787static __inline__ vector float __attribute__((__always_inline__))
4788vec_vmaddfp(vector float __a, vector float __b, vector float __c) {
4789 return __builtin_altivec_vmaddfp(__a, __b, __c);
4790}
4791
4792/* vec_madds */
4793
4794static __inline__ vector signed short __attribute__((__always_inline__))
4795vec_madds(vector signed short __a, vector signed short __b,
4796 vector signed short __c) {
4797 return __builtin_altivec_vmhaddshs(__a, __b, __c);
4798}
4799
4800/* vec_vmhaddshs */
4801static __inline__ vector signed short __attribute__((__always_inline__))
4802vec_vmhaddshs(vector signed short __a, vector signed short __b,
4803 vector signed short __c) {
4804 return __builtin_altivec_vmhaddshs(__a, __b, __c);
4805}
4806
4807/* vec_msub */
4808
4809#ifdef __VSX__
4810static __inline__ vector float __ATTRS_o_ai vec_msub(vector float __a,
4811 vector float __b,
4812 vector float __c) {
4813 return __builtin_vsx_xvmsubasp(__a, __b, __c);
4814}
4815
4816static __inline__ vector double __ATTRS_o_ai vec_msub(vector double __a,
4817 vector double __b,
4818 vector double __c) {
4819 return __builtin_vsx_xvmsubadp(__a, __b, __c);
4820}
4821#endif
4822
4823/* vec_max */
4824
4825static __inline__ vector signed char __ATTRS_o_ai
4826vec_max(vector signed char __a, vector signed char __b) {
4827 return __builtin_altivec_vmaxsb(__a, __b);
4828}
4829
4830static __inline__ vector signed char __ATTRS_o_ai
4831vec_max(vector bool char __a, vector signed char __b) {
4832 return __builtin_altivec_vmaxsb((vector signed char)__a, __b);
4833}
4834
4835static __inline__ vector signed char __ATTRS_o_ai
4836vec_max(vector signed char __a, vector bool char __b) {
4837 return __builtin_altivec_vmaxsb(__a, (vector signed char)__b);
4838}
4839
4840static __inline__ vector unsigned char __ATTRS_o_ai
4841vec_max(vector unsigned char __a, vector unsigned char __b) {
4842 return __builtin_altivec_vmaxub(__a, __b);
4843}
4844
4845static __inline__ vector unsigned char __ATTRS_o_ai
4846vec_max(vector bool char __a, vector unsigned char __b) {
4847 return __builtin_altivec_vmaxub((vector unsigned char)__a, __b);
4848}
4849
4850static __inline__ vector unsigned char __ATTRS_o_ai
4851vec_max(vector unsigned char __a, vector bool char __b) {
4852 return __builtin_altivec_vmaxub(__a, (vector unsigned char)__b);
4853}
4854
4855static __inline__ vector short __ATTRS_o_ai vec_max(vector short __a,
4856 vector short __b) {
4857 return __builtin_altivec_vmaxsh(__a, __b);
4858}
4859
4860static __inline__ vector short __ATTRS_o_ai vec_max(vector bool short __a,
4861 vector short __b) {
4862 return __builtin_altivec_vmaxsh((vector short)__a, __b);
4863}
4864
4865static __inline__ vector short __ATTRS_o_ai vec_max(vector short __a,
4866 vector bool short __b) {
4867 return __builtin_altivec_vmaxsh(__a, (vector short)__b);
4868}
4869
4870static __inline__ vector unsigned short __ATTRS_o_ai
4871vec_max(vector unsigned short __a, vector unsigned short __b) {
4872 return __builtin_altivec_vmaxuh(__a, __b);
4873}
4874
4875static __inline__ vector unsigned short __ATTRS_o_ai
4876vec_max(vector bool short __a, vector unsigned short __b) {
4877 return __builtin_altivec_vmaxuh((vector unsigned short)__a, __b);
4878}
4879
4880static __inline__ vector unsigned short __ATTRS_o_ai
4881vec_max(vector unsigned short __a, vector bool short __b) {
4882 return __builtin_altivec_vmaxuh(__a, (vector unsigned short)__b);
4883}
4884
4885static __inline__ vector int __ATTRS_o_ai vec_max(vector int __a,
4886 vector int __b) {
4887 return __builtin_altivec_vmaxsw(__a, __b);
4888}
4889
4890static __inline__ vector int __ATTRS_o_ai vec_max(vector bool int __a,
4891 vector int __b) {
4892 return __builtin_altivec_vmaxsw((vector int)__a, __b);
4893}
4894
4895static __inline__ vector int __ATTRS_o_ai vec_max(vector int __a,
4896 vector bool int __b) {
4897 return __builtin_altivec_vmaxsw(__a, (vector int)__b);
4898}
4899
4900static __inline__ vector unsigned int __ATTRS_o_ai
4901vec_max(vector unsigned int __a, vector unsigned int __b) {
4902 return __builtin_altivec_vmaxuw(__a, __b);
4903}
4904
4905static __inline__ vector unsigned int __ATTRS_o_ai
4906vec_max(vector bool int __a, vector unsigned int __b) {
4907 return __builtin_altivec_vmaxuw((vector unsigned int)__a, __b);
4908}
4909
4910static __inline__ vector unsigned int __ATTRS_o_ai
4911vec_max(vector unsigned int __a, vector bool int __b) {
4912 return __builtin_altivec_vmaxuw(__a, (vector unsigned int)__b);
4913}
4914
4915#ifdef __POWER8_VECTOR__
4916static __inline__ vector signed long long __ATTRS_o_ai
4917vec_max(vector signed long long __a, vector signed long long __b) {
4918 return __builtin_altivec_vmaxsd(__a, __b);
4919}
4920
4921static __inline__ vector signed long long __ATTRS_o_ai
4922vec_max(vector bool long long __a, vector signed long long __b) {
4923 return __builtin_altivec_vmaxsd((vector signed long long)__a, __b);
4924}
4925
4926static __inline__ vector signed long long __ATTRS_o_ai
4927vec_max(vector signed long long __a, vector bool long long __b) {
4928 return __builtin_altivec_vmaxsd(__a, (vector signed long long)__b);
4929}
4930
4931static __inline__ vector unsigned long long __ATTRS_o_ai
4932vec_max(vector unsigned long long __a, vector unsigned long long __b) {
4933 return __builtin_altivec_vmaxud(__a, __b);
4934}
4935
4936static __inline__ vector unsigned long long __ATTRS_o_ai
4937vec_max(vector bool long long __a, vector unsigned long long __b) {
4938 return __builtin_altivec_vmaxud((vector unsigned long long)__a, __b);
4939}
4940
4941static __inline__ vector unsigned long long __ATTRS_o_ai
4942vec_max(vector unsigned long long __a, vector bool long long __b) {
4943 return __builtin_altivec_vmaxud(__a, (vector unsigned long long)__b);
4944}
4945#endif
4946
4947static __inline__ vector float __ATTRS_o_ai vec_max(vector float __a,
4948 vector float __b) {
4949#ifdef __VSX__
4950 return __builtin_vsx_xvmaxsp(__a, __b);
4951#else
4952 return __builtin_altivec_vmaxfp(__a, __b);
4953#endif
4954}
4955
4956#ifdef __VSX__
4957static __inline__ vector double __ATTRS_o_ai vec_max(vector double __a,
4958 vector double __b) {
4959 return __builtin_vsx_xvmaxdp(__a, __b);
4960}
4961#endif
4962
4963/* vec_vmaxsb */
4964
4965static __inline__ vector signed char __ATTRS_o_ai
4966vec_vmaxsb(vector signed char __a, vector signed char __b) {
4967 return __builtin_altivec_vmaxsb(__a, __b);
4968}
4969
4970static __inline__ vector signed char __ATTRS_o_ai
4971vec_vmaxsb(vector bool char __a, vector signed char __b) {
4972 return __builtin_altivec_vmaxsb((vector signed char)__a, __b);
4973}
4974
4975static __inline__ vector signed char __ATTRS_o_ai
4976vec_vmaxsb(vector signed char __a, vector bool char __b) {
4977 return __builtin_altivec_vmaxsb(__a, (vector signed char)__b);
4978}
4979
4980/* vec_vmaxub */
4981
4982static __inline__ vector unsigned char __ATTRS_o_ai
4983vec_vmaxub(vector unsigned char __a, vector unsigned char __b) {
4984 return __builtin_altivec_vmaxub(__a, __b);
4985}
4986
4987static __inline__ vector unsigned char __ATTRS_o_ai
4988vec_vmaxub(vector bool char __a, vector unsigned char __b) {
4989 return __builtin_altivec_vmaxub((vector unsigned char)__a, __b);
4990}
4991
4992static __inline__ vector unsigned char __ATTRS_o_ai
4993vec_vmaxub(vector unsigned char __a, vector bool char __b) {
4994 return __builtin_altivec_vmaxub(__a, (vector unsigned char)__b);
4995}
4996
4997/* vec_vmaxsh */
4998
4999static __inline__ vector short __ATTRS_o_ai vec_vmaxsh(vector short __a,
5000 vector short __b) {
5001 return __builtin_altivec_vmaxsh(__a, __b);
5002}
5003
5004static __inline__ vector short __ATTRS_o_ai vec_vmaxsh(vector bool short __a,
5005 vector short __b) {
5006 return __builtin_altivec_vmaxsh((vector short)__a, __b);
5007}
5008
5009static __inline__ vector short __ATTRS_o_ai vec_vmaxsh(vector short __a,
5010 vector bool short __b) {
5011 return __builtin_altivec_vmaxsh(__a, (vector short)__b);
5012}
5013
5014/* vec_vmaxuh */
5015
5016static __inline__ vector unsigned short __ATTRS_o_ai
5017vec_vmaxuh(vector unsigned short __a, vector unsigned short __b) {
5018 return __builtin_altivec_vmaxuh(__a, __b);
5019}
5020
5021static __inline__ vector unsigned short __ATTRS_o_ai
5022vec_vmaxuh(vector bool short __a, vector unsigned short __b) {
5023 return __builtin_altivec_vmaxuh((vector unsigned short)__a, __b);
5024}
5025
5026static __inline__ vector unsigned short __ATTRS_o_ai
5027vec_vmaxuh(vector unsigned short __a, vector bool short __b) {
5028 return __builtin_altivec_vmaxuh(__a, (vector unsigned short)__b);
5029}
5030
5031/* vec_vmaxsw */
5032
5033static __inline__ vector int __ATTRS_o_ai vec_vmaxsw(vector int __a,
5034 vector int __b) {
5035 return __builtin_altivec_vmaxsw(__a, __b);
5036}
5037
5038static __inline__ vector int __ATTRS_o_ai vec_vmaxsw(vector bool int __a,
5039 vector int __b) {
5040 return __builtin_altivec_vmaxsw((vector int)__a, __b);
5041}
5042
5043static __inline__ vector int __ATTRS_o_ai vec_vmaxsw(vector int __a,
5044 vector bool int __b) {
5045 return __builtin_altivec_vmaxsw(__a, (vector int)__b);
5046}
5047
5048/* vec_vmaxuw */
5049
5050static __inline__ vector unsigned int __ATTRS_o_ai
5051vec_vmaxuw(vector unsigned int __a, vector unsigned int __b) {
5052 return __builtin_altivec_vmaxuw(__a, __b);
5053}
5054
5055static __inline__ vector unsigned int __ATTRS_o_ai
5056vec_vmaxuw(vector bool int __a, vector unsigned int __b) {
5057 return __builtin_altivec_vmaxuw((vector unsigned int)__a, __b);
5058}
5059
5060static __inline__ vector unsigned int __ATTRS_o_ai
5061vec_vmaxuw(vector unsigned int __a, vector bool int __b) {
5062 return __builtin_altivec_vmaxuw(__a, (vector unsigned int)__b);
5063}
5064
5065/* vec_vmaxfp */
5066
5067static __inline__ vector float __attribute__((__always_inline__))
5068vec_vmaxfp(vector float __a, vector float __b) {
5069#ifdef __VSX__
5070 return __builtin_vsx_xvmaxsp(__a, __b);
5071#else
5072 return __builtin_altivec_vmaxfp(__a, __b);
5073#endif
5074}
5075
5076/* vec_mergeh */
5077
5078static __inline__ vector signed char __ATTRS_o_ai
5079vec_mergeh(vector signed char __a, vector signed char __b) {
5080 return vec_perm(__a, __b,
5081 (vector unsigned char)(0x00, 0x10, 0x01, 0x11, 0x02, 0x12,
5082 0x03, 0x13, 0x04, 0x14, 0x05, 0x15,
5083 0x06, 0x16, 0x07, 0x17));
5084}
5085
5086static __inline__ vector unsigned char __ATTRS_o_ai
5087vec_mergeh(vector unsigned char __a, vector unsigned char __b) {
5088 return vec_perm(__a, __b,
5089 (vector unsigned char)(0x00, 0x10, 0x01, 0x11, 0x02, 0x12,
5090 0x03, 0x13, 0x04, 0x14, 0x05, 0x15,
5091 0x06, 0x16, 0x07, 0x17));
5092}
5093
5094static __inline__ vector bool char __ATTRS_o_ai
5095vec_mergeh(vector bool char __a, vector bool char __b) {
5096 return vec_perm(__a, __b,
5097 (vector unsigned char)(0x00, 0x10, 0x01, 0x11, 0x02, 0x12,
5098 0x03, 0x13, 0x04, 0x14, 0x05, 0x15,
5099 0x06, 0x16, 0x07, 0x17));
5100}
5101
5102static __inline__ vector short __ATTRS_o_ai vec_mergeh(vector short __a,
5103 vector short __b) {
5104 return vec_perm(__a, __b,
5105 (vector unsigned char)(0x00, 0x01, 0x10, 0x11, 0x02, 0x03,
5106 0x12, 0x13, 0x04, 0x05, 0x14, 0x15,
5107 0x06, 0x07, 0x16, 0x17));
5108}
5109
5110static __inline__ vector unsigned short __ATTRS_o_ai
5111vec_mergeh(vector unsigned short __a, vector unsigned short __b) {
5112 return vec_perm(__a, __b,
5113 (vector unsigned char)(0x00, 0x01, 0x10, 0x11, 0x02, 0x03,
5114 0x12, 0x13, 0x04, 0x05, 0x14, 0x15,
5115 0x06, 0x07, 0x16, 0x17));
5116}
5117
5118static __inline__ vector bool short __ATTRS_o_ai
5119vec_mergeh(vector bool short __a, vector bool short __b) {
5120 return vec_perm(__a, __b,
5121 (vector unsigned char)(0x00, 0x01, 0x10, 0x11, 0x02, 0x03,
5122 0x12, 0x13, 0x04, 0x05, 0x14, 0x15,
5123 0x06, 0x07, 0x16, 0x17));
5124}
5125
5126static __inline__ vector pixel __ATTRS_o_ai vec_mergeh(vector pixel __a,
5127 vector pixel __b) {
5128 return vec_perm(__a, __b,
5129 (vector unsigned char)(0x00, 0x01, 0x10, 0x11, 0x02, 0x03,
5130 0x12, 0x13, 0x04, 0x05, 0x14, 0x15,
5131 0x06, 0x07, 0x16, 0x17));
5132}
5133
5134static __inline__ vector int __ATTRS_o_ai vec_mergeh(vector int __a,
5135 vector int __b) {
5136 return vec_perm(__a, __b,
5137 (vector unsigned char)(0x00, 0x01, 0x02, 0x03, 0x10, 0x11,
5138 0x12, 0x13, 0x04, 0x05, 0x06, 0x07,
5139 0x14, 0x15, 0x16, 0x17));
5140}
5141
5142static __inline__ vector unsigned int __ATTRS_o_ai
5143vec_mergeh(vector unsigned int __a, vector unsigned int __b) {
5144 return vec_perm(__a, __b,
5145 (vector unsigned char)(0x00, 0x01, 0x02, 0x03, 0x10, 0x11,
5146 0x12, 0x13, 0x04, 0x05, 0x06, 0x07,
5147 0x14, 0x15, 0x16, 0x17));
5148}
5149
5150static __inline__ vector bool int __ATTRS_o_ai vec_mergeh(vector bool int __a,
5151 vector bool int __b) {
5152 return vec_perm(__a, __b,
5153 (vector unsigned char)(0x00, 0x01, 0x02, 0x03, 0x10, 0x11,
5154 0x12, 0x13, 0x04, 0x05, 0x06, 0x07,
5155 0x14, 0x15, 0x16, 0x17));
5156}
5157
5158static __inline__ vector float __ATTRS_o_ai vec_mergeh(vector float __a,
5159 vector float __b) {
5160 return vec_perm(__a, __b,
5161 (vector unsigned char)(0x00, 0x01, 0x02, 0x03, 0x10, 0x11,
5162 0x12, 0x13, 0x04, 0x05, 0x06, 0x07,
5163 0x14, 0x15, 0x16, 0x17));
5164}
5165
5166#ifdef __VSX__
5167static __inline__ vector signed long long __ATTRS_o_ai
5168vec_mergeh(vector signed long long __a, vector signed long long __b) {
5169 return vec_perm(__a, __b,
5170 (vector unsigned char)(0x00, 0x01, 0x02, 0x03, 0x04, 0x05,
5171 0x06, 0x07, 0x10, 0x11, 0x12, 0x13,
5172 0x14, 0x15, 0x16, 0x17));
5173}
5174
5175static __inline__ vector signed long long __ATTRS_o_ai
5176vec_mergeh(vector signed long long __a, vector bool long long __b) {
5177 return vec_perm(__a, (vector signed long long)__b,
5178 (vector unsigned char)(0x00, 0x01, 0x02, 0x03, 0x04, 0x05,
5179 0x06, 0x07, 0x10, 0x11, 0x12, 0x13,
5180 0x14, 0x15, 0x16, 0x17));
5181}
5182
5183static __inline__ vector signed long long __ATTRS_o_ai
5184vec_mergeh(vector bool long long __a, vector signed long long __b) {
5185 return vec_perm((vector signed long long)__a, __b,
5186 (vector unsigned char)(0x00, 0x01, 0x02, 0x03, 0x04, 0x05,
5187 0x06, 0x07, 0x10, 0x11, 0x12, 0x13,
5188 0x14, 0x15, 0x16, 0x17));
5189}
5190
5191static __inline__ vector unsigned long long __ATTRS_o_ai
5192vec_mergeh(vector unsigned long long __a, vector unsigned long long __b) {
5193 return vec_perm(__a, __b,
5194 (vector unsigned char)(0x00, 0x01, 0x02, 0x03, 0x04, 0x05,
5195 0x06, 0x07, 0x10, 0x11, 0x12, 0x13,
5196 0x14, 0x15, 0x16, 0x17));
5197}
5198
5199static __inline__ vector unsigned long long __ATTRS_o_ai
5200vec_mergeh(vector unsigned long long __a, vector bool long long __b) {
5201 return vec_perm(__a, (vector unsigned long long)__b,
5202 (vector unsigned char)(0x00, 0x01, 0x02, 0x03, 0x04, 0x05,
5203 0x06, 0x07, 0x10, 0x11, 0x12, 0x13,
5204 0x14, 0x15, 0x16, 0x17));
5205}
5206
5207static __inline__ vector unsigned long long __ATTRS_o_ai
5208vec_mergeh(vector bool long long __a, vector unsigned long long __b) {
5209 return vec_perm((vector unsigned long long)__a, __b,
5210 (vector unsigned char)(0x00, 0x01, 0x02, 0x03, 0x04, 0x05,
5211 0x06, 0x07, 0x10, 0x11, 0x12, 0x13,
5212 0x14, 0x15, 0x16, 0x17));
5213}
5214
5215static __inline__ vector bool long long __ATTRS_o_ai
5216vec_mergeh(vector bool long long __a, vector bool long long __b) {
5217 return vec_perm(__a, __b,
5218 (vector unsigned char)(0x00, 0x01, 0x02, 0x03, 0x04, 0x05,
5219 0x06, 0x07, 0x10, 0x11, 0x12, 0x13,
5220 0x14, 0x15, 0x16, 0x17));
5221}
5222
5223static __inline__ vector double __ATTRS_o_ai vec_mergeh(vector double __a,
5224 vector double __b) {
5225 return vec_perm(__a, __b,
5226 (vector unsigned char)(0x00, 0x01, 0x02, 0x03, 0x04, 0x05,
5227 0x06, 0x07, 0x10, 0x11, 0x12, 0x13,
5228 0x14, 0x15, 0x16, 0x17));
5229}
5230static __inline__ vector double __ATTRS_o_ai
5231vec_mergeh(vector double __a, vector bool long long __b) {
5232 return vec_perm(__a, (vector double)__b,
5233 (vector unsigned char)(0x00, 0x01, 0x02, 0x03, 0x04, 0x05,
5234 0x06, 0x07, 0x10, 0x11, 0x12, 0x13,
5235 0x14, 0x15, 0x16, 0x17));
5236}
5237static __inline__ vector double __ATTRS_o_ai
5238vec_mergeh(vector bool long long __a, vector double __b) {
5239 return vec_perm((vector double)__a, __b,
5240 (vector unsigned char)(0x00, 0x01, 0x02, 0x03, 0x04, 0x05,
5241 0x06, 0x07, 0x10, 0x11, 0x12, 0x13,
5242 0x14, 0x15, 0x16, 0x17));
5243}
5244#endif
5245
5246/* vec_vmrghb */
5247
5248#define __builtin_altivec_vmrghb vec_vmrghb
5249
5250static __inline__ vector signed char __ATTRS_o_ai
5251vec_vmrghb(vector signed char __a, vector signed char __b) {
5252 return vec_perm(__a, __b,
5253 (vector unsigned char)(0x00, 0x10, 0x01, 0x11, 0x02, 0x12,
5254 0x03, 0x13, 0x04, 0x14, 0x05, 0x15,
5255 0x06, 0x16, 0x07, 0x17));
5256}
5257
5258static __inline__ vector unsigned char __ATTRS_o_ai
5259vec_vmrghb(vector unsigned char __a, vector unsigned char __b) {
5260 return vec_perm(__a, __b,
5261 (vector unsigned char)(0x00, 0x10, 0x01, 0x11, 0x02, 0x12,
5262 0x03, 0x13, 0x04, 0x14, 0x05, 0x15,
5263 0x06, 0x16, 0x07, 0x17));
5264}
5265
5266static __inline__ vector bool char __ATTRS_o_ai
5267vec_vmrghb(vector bool char __a, vector bool char __b) {
5268 return vec_perm(__a, __b,
5269 (vector unsigned char)(0x00, 0x10, 0x01, 0x11, 0x02, 0x12,
5270 0x03, 0x13, 0x04, 0x14, 0x05, 0x15,
5271 0x06, 0x16, 0x07, 0x17));
5272}
5273
5274/* vec_vmrghh */
5275
5276#define __builtin_altivec_vmrghh vec_vmrghh
5277
5278static __inline__ vector short __ATTRS_o_ai vec_vmrghh(vector short __a,
5279 vector short __b) {
5280 return vec_perm(__a, __b,
5281 (vector unsigned char)(0x00, 0x01, 0x10, 0x11, 0x02, 0x03,
5282 0x12, 0x13, 0x04, 0x05, 0x14, 0x15,
5283 0x06, 0x07, 0x16, 0x17));
5284}
5285
5286static __inline__ vector unsigned short __ATTRS_o_ai
5287vec_vmrghh(vector unsigned short __a, vector unsigned short __b) {
5288 return vec_perm(__a, __b,
5289 (vector unsigned char)(0x00, 0x01, 0x10, 0x11, 0x02, 0x03,
5290 0x12, 0x13, 0x04, 0x05, 0x14, 0x15,
5291 0x06, 0x07, 0x16, 0x17));
5292}
5293
5294static __inline__ vector bool short __ATTRS_o_ai
5295vec_vmrghh(vector bool short __a, vector bool short __b) {
5296 return vec_perm(__a, __b,
5297 (vector unsigned char)(0x00, 0x01, 0x10, 0x11, 0x02, 0x03,
5298 0x12, 0x13, 0x04, 0x05, 0x14, 0x15,
5299 0x06, 0x07, 0x16, 0x17));
5300}
5301
5302static __inline__ vector pixel __ATTRS_o_ai vec_vmrghh(vector pixel __a,
5303 vector pixel __b) {
5304 return vec_perm(__a, __b,
5305 (vector unsigned char)(0x00, 0x01, 0x10, 0x11, 0x02, 0x03,
5306 0x12, 0x13, 0x04, 0x05, 0x14, 0x15,
5307 0x06, 0x07, 0x16, 0x17));
5308}
5309
5310/* vec_vmrghw */
5311
5312#define __builtin_altivec_vmrghw vec_vmrghw
5313
5314static __inline__ vector int __ATTRS_o_ai vec_vmrghw(vector int __a,
5315 vector int __b) {
5316 return vec_perm(__a, __b,
5317 (vector unsigned char)(0x00, 0x01, 0x02, 0x03, 0x10, 0x11,
5318 0x12, 0x13, 0x04, 0x05, 0x06, 0x07,
5319 0x14, 0x15, 0x16, 0x17));
5320}
5321
5322static __inline__ vector unsigned int __ATTRS_o_ai
5323vec_vmrghw(vector unsigned int __a, vector unsigned int __b) {
5324 return vec_perm(__a, __b,
5325 (vector unsigned char)(0x00, 0x01, 0x02, 0x03, 0x10, 0x11,
5326 0x12, 0x13, 0x04, 0x05, 0x06, 0x07,
5327 0x14, 0x15, 0x16, 0x17));
5328}
5329
5330static __inline__ vector bool int __ATTRS_o_ai vec_vmrghw(vector bool int __a,
5331 vector bool int __b) {
5332 return vec_perm(__a, __b,
5333 (vector unsigned char)(0x00, 0x01, 0x02, 0x03, 0x10, 0x11,
5334 0x12, 0x13, 0x04, 0x05, 0x06, 0x07,
5335 0x14, 0x15, 0x16, 0x17));
5336}
5337
5338static __inline__ vector float __ATTRS_o_ai vec_vmrghw(vector float __a,
5339 vector float __b) {
5340 return vec_perm(__a, __b,
5341 (vector unsigned char)(0x00, 0x01, 0x02, 0x03, 0x10, 0x11,
5342 0x12, 0x13, 0x04, 0x05, 0x06, 0x07,
5343 0x14, 0x15, 0x16, 0x17));
5344}
5345
5346/* vec_mergel */
5347
5348static __inline__ vector signed char __ATTRS_o_ai
5349vec_mergel(vector signed char __a, vector signed char __b) {
5350 return vec_perm(__a, __b,
5351 (vector unsigned char)(0x08, 0x18, 0x09, 0x19, 0x0A, 0x1A,
5352 0x0B, 0x1B, 0x0C, 0x1C, 0x0D, 0x1D,
5353 0x0E, 0x1E, 0x0F, 0x1F));
5354}
5355
5356static __inline__ vector unsigned char __ATTRS_o_ai
5357vec_mergel(vector unsigned char __a, vector unsigned char __b) {
5358 return vec_perm(__a, __b,
5359 (vector unsigned char)(0x08, 0x18, 0x09, 0x19, 0x0A, 0x1A,
5360 0x0B, 0x1B, 0x0C, 0x1C, 0x0D, 0x1D,
5361 0x0E, 0x1E, 0x0F, 0x1F));
5362}
5363
5364static __inline__ vector bool char __ATTRS_o_ai
5365vec_mergel(vector bool char __a, vector bool char __b) {
5366 return vec_perm(__a, __b,
5367 (vector unsigned char)(0x08, 0x18, 0x09, 0x19, 0x0A, 0x1A,
5368 0x0B, 0x1B, 0x0C, 0x1C, 0x0D, 0x1D,
5369 0x0E, 0x1E, 0x0F, 0x1F));
5370}
5371
5372static __inline__ vector short __ATTRS_o_ai vec_mergel(vector short __a,
5373 vector short __b) {
5374 return vec_perm(__a, __b,
5375 (vector unsigned char)(0x08, 0x09, 0x18, 0x19, 0x0A, 0x0B,
5376 0x1A, 0x1B, 0x0C, 0x0D, 0x1C, 0x1D,
5377 0x0E, 0x0F, 0x1E, 0x1F));
5378}
5379
5380static __inline__ vector unsigned short __ATTRS_o_ai
5381vec_mergel(vector unsigned short __a, vector unsigned short __b) {
5382 return vec_perm(__a, __b,
5383 (vector unsigned char)(0x08, 0x09, 0x18, 0x19, 0x0A, 0x0B,
5384 0x1A, 0x1B, 0x0C, 0x0D, 0x1C, 0x1D,
5385 0x0E, 0x0F, 0x1E, 0x1F));
5386}
5387
5388static __inline__ vector bool short __ATTRS_o_ai
5389vec_mergel(vector bool short __a, vector bool short __b) {
5390 return vec_perm(__a, __b,
5391 (vector unsigned char)(0x08, 0x09, 0x18, 0x19, 0x0A, 0x0B,
5392 0x1A, 0x1B, 0x0C, 0x0D, 0x1C, 0x1D,
5393 0x0E, 0x0F, 0x1E, 0x1F));
5394}
5395
5396static __inline__ vector pixel __ATTRS_o_ai vec_mergel(vector pixel __a,
5397 vector pixel __b) {
5398 return vec_perm(__a, __b,
5399 (vector unsigned char)(0x08, 0x09, 0x18, 0x19, 0x0A, 0x0B,
5400 0x1A, 0x1B, 0x0C, 0x0D, 0x1C, 0x1D,
5401 0x0E, 0x0F, 0x1E, 0x1F));
5402}
5403
5404static __inline__ vector int __ATTRS_o_ai vec_mergel(vector int __a,
5405 vector int __b) {
5406 return vec_perm(__a, __b,
5407 (vector unsigned char)(0x08, 0x09, 0x0A, 0x0B, 0x18, 0x19,
5408 0x1A, 0x1B, 0x0C, 0x0D, 0x0E, 0x0F,
5409 0x1C, 0x1D, 0x1E, 0x1F));
5410}
5411
5412static __inline__ vector unsigned int __ATTRS_o_ai
5413vec_mergel(vector unsigned int __a, vector unsigned int __b) {
5414 return vec_perm(__a, __b,
5415 (vector unsigned char)(0x08, 0x09, 0x0A, 0x0B, 0x18, 0x19,
5416 0x1A, 0x1B, 0x0C, 0x0D, 0x0E, 0x0F,
5417 0x1C, 0x1D, 0x1E, 0x1F));
5418}
5419
5420static __inline__ vector bool int __ATTRS_o_ai vec_mergel(vector bool int __a,
5421 vector bool int __b) {
5422 return vec_perm(__a, __b,
5423 (vector unsigned char)(0x08, 0x09, 0x0A, 0x0B, 0x18, 0x19,
5424 0x1A, 0x1B, 0x0C, 0x0D, 0x0E, 0x0F,
5425 0x1C, 0x1D, 0x1E, 0x1F));
5426}
5427
5428static __inline__ vector float __ATTRS_o_ai vec_mergel(vector float __a,
5429 vector float __b) {
5430 return vec_perm(__a, __b,
5431 (vector unsigned char)(0x08, 0x09, 0x0A, 0x0B, 0x18, 0x19,
5432 0x1A, 0x1B, 0x0C, 0x0D, 0x0E, 0x0F,
5433 0x1C, 0x1D, 0x1E, 0x1F));
5434}
5435
5436#ifdef __VSX__
5437static __inline__ vector signed long long __ATTRS_o_ai
5438vec_mergel(vector signed long long __a, vector signed long long __b) {
5439 return vec_perm(__a, __b,
5440 (vector unsigned char)(0x08, 0x09, 0x0A, 0x0B, 0x0C, 0x0D,
5441 0x0E, 0x0F, 0x18, 0X19, 0x1A, 0x1B,
5442 0x1C, 0x1D, 0x1E, 0x1F));
5443}
5444static __inline__ vector signed long long __ATTRS_o_ai
5445vec_mergel(vector signed long long __a, vector bool long long __b) {
5446 return vec_perm(__a, (vector signed long long)__b,
5447 (vector unsigned char)(0x08, 0x09, 0x0A, 0x0B, 0x0C, 0x0D,
5448 0x0E, 0x0F, 0x18, 0X19, 0x1A, 0x1B,
5449 0x1C, 0x1D, 0x1E, 0x1F));
5450}
5451static __inline__ vector signed long long __ATTRS_o_ai
5452vec_mergel(vector bool long long __a, vector signed long long __b) {
5453 return vec_perm((vector signed long long)__a, __b,
5454 (vector unsigned char)(0x08, 0x09, 0x0A, 0x0B, 0x0C, 0x0D,
5455 0x0E, 0x0F, 0x18, 0X19, 0x1A, 0x1B,
5456 0x1C, 0x1D, 0x1E, 0x1F));
5457}
5458static __inline__ vector unsigned long long __ATTRS_o_ai
5459vec_mergel(vector unsigned long long __a, vector unsigned long long __b) {
5460 return vec_perm(__a, __b,
5461 (vector unsigned char)(0x08, 0x09, 0x0A, 0x0B, 0x0C, 0x0D,
5462 0x0E, 0x0F, 0x18, 0X19, 0x1A, 0x1B,
5463 0x1C, 0x1D, 0x1E, 0x1F));
5464}
5465static __inline__ vector unsigned long long __ATTRS_o_ai
5466vec_mergel(vector unsigned long long __a, vector bool long long __b) {
5467 return vec_perm(__a, (vector unsigned long long)__b,
5468 (vector unsigned char)(0x08, 0x09, 0x0A, 0x0B, 0x0C, 0x0D,
5469 0x0E, 0x0F, 0x18, 0X19, 0x1A, 0x1B,
5470 0x1C, 0x1D, 0x1E, 0x1F));
5471}
5472static __inline__ vector unsigned long long __ATTRS_o_ai
5473vec_mergel(vector bool long long __a, vector unsigned long long __b) {
5474 return vec_perm((vector unsigned long long)__a, __b,
5475 (vector unsigned char)(0x08, 0x09, 0x0A, 0x0B, 0x0C, 0x0D,
5476 0x0E, 0x0F, 0x18, 0X19, 0x1A, 0x1B,
5477 0x1C, 0x1D, 0x1E, 0x1F));
5478}
5479static __inline__ vector bool long long __ATTRS_o_ai
5480vec_mergel(vector bool long long __a, vector bool long long __b) {
5481 return vec_perm(__a, __b,
5482 (vector unsigned char)(0x08, 0x09, 0x0A, 0x0B, 0x0C, 0x0D,
5483 0x0E, 0x0F, 0x18, 0X19, 0x1A, 0x1B,
5484 0x1C, 0x1D, 0x1E, 0x1F));
5485}
5486static __inline__ vector double __ATTRS_o_ai vec_mergel(vector double __a,
5487 vector double __b) {
5488 return vec_perm(__a, __b,
5489 (vector unsigned char)(0x08, 0x09, 0x0A, 0x0B, 0x0C, 0x0D,
5490 0x0E, 0x0F, 0x18, 0X19, 0x1A, 0x1B,
5491 0x1C, 0x1D, 0x1E, 0x1F));
5492}
5493static __inline__ vector double __ATTRS_o_ai
5494vec_mergel(vector double __a, vector bool long long __b) {
5495 return vec_perm(__a, (vector double)__b,
5496 (vector unsigned char)(0x08, 0x09, 0x0A, 0x0B, 0x0C, 0x0D,
5497 0x0E, 0x0F, 0x18, 0X19, 0x1A, 0x1B,
5498 0x1C, 0x1D, 0x1E, 0x1F));
5499}
5500static __inline__ vector double __ATTRS_o_ai
5501vec_mergel(vector bool long long __a, vector double __b) {
5502 return vec_perm((vector double)__a, __b,
5503 (vector unsigned char)(0x08, 0x09, 0x0A, 0x0B, 0x0C, 0x0D,
5504 0x0E, 0x0F, 0x18, 0X19, 0x1A, 0x1B,
5505 0x1C, 0x1D, 0x1E, 0x1F));
5506}
5507#endif
5508
5509/* vec_vmrglb */
5510
5511#define __builtin_altivec_vmrglb vec_vmrglb
5512
5513static __inline__ vector signed char __ATTRS_o_ai
5514vec_vmrglb(vector signed char __a, vector signed char __b) {
5515 return vec_perm(__a, __b,
5516 (vector unsigned char)(0x08, 0x18, 0x09, 0x19, 0x0A, 0x1A,
5517 0x0B, 0x1B, 0x0C, 0x1C, 0x0D, 0x1D,
5518 0x0E, 0x1E, 0x0F, 0x1F));
5519}
5520
5521static __inline__ vector unsigned char __ATTRS_o_ai
5522vec_vmrglb(vector unsigned char __a, vector unsigned char __b) {
5523 return vec_perm(__a, __b,
5524 (vector unsigned char)(0x08, 0x18, 0x09, 0x19, 0x0A, 0x1A,
5525 0x0B, 0x1B, 0x0C, 0x1C, 0x0D, 0x1D,
5526 0x0E, 0x1E, 0x0F, 0x1F));
5527}
5528
5529static __inline__ vector bool char __ATTRS_o_ai
5530vec_vmrglb(vector bool char __a, vector bool char __b) {
5531 return vec_perm(__a, __b,
5532 (vector unsigned char)(0x08, 0x18, 0x09, 0x19, 0x0A, 0x1A,
5533 0x0B, 0x1B, 0x0C, 0x1C, 0x0D, 0x1D,
5534 0x0E, 0x1E, 0x0F, 0x1F));
5535}
5536
5537/* vec_vmrglh */
5538
5539#define __builtin_altivec_vmrglh vec_vmrglh
5540
5541static __inline__ vector short __ATTRS_o_ai vec_vmrglh(vector short __a,
5542 vector short __b) {
5543 return vec_perm(__a, __b,
5544 (vector unsigned char)(0x08, 0x09, 0x18, 0x19, 0x0A, 0x0B,
5545 0x1A, 0x1B, 0x0C, 0x0D, 0x1C, 0x1D,
5546 0x0E, 0x0F, 0x1E, 0x1F));
5547}
5548
5549static __inline__ vector unsigned short __ATTRS_o_ai
5550vec_vmrglh(vector unsigned short __a, vector unsigned short __b) {
5551 return vec_perm(__a, __b,
5552 (vector unsigned char)(0x08, 0x09, 0x18, 0x19, 0x0A, 0x0B,
5553 0x1A, 0x1B, 0x0C, 0x0D, 0x1C, 0x1D,
5554 0x0E, 0x0F, 0x1E, 0x1F));
5555}
5556
5557static __inline__ vector bool short __ATTRS_o_ai
5558vec_vmrglh(vector bool short __a, vector bool short __b) {
5559 return vec_perm(__a, __b,
5560 (vector unsigned char)(0x08, 0x09, 0x18, 0x19, 0x0A, 0x0B,
5561 0x1A, 0x1B, 0x0C, 0x0D, 0x1C, 0x1D,
5562 0x0E, 0x0F, 0x1E, 0x1F));
5563}
5564
5565static __inline__ vector pixel __ATTRS_o_ai vec_vmrglh(vector pixel __a,
5566 vector pixel __b) {
5567 return vec_perm(__a, __b,
5568 (vector unsigned char)(0x08, 0x09, 0x18, 0x19, 0x0A, 0x0B,
5569 0x1A, 0x1B, 0x0C, 0x0D, 0x1C, 0x1D,
5570 0x0E, 0x0F, 0x1E, 0x1F));
5571}
5572
5573/* vec_vmrglw */
5574
5575#define __builtin_altivec_vmrglw vec_vmrglw
5576
5577static __inline__ vector int __ATTRS_o_ai vec_vmrglw(vector int __a,
5578 vector int __b) {
5579 return vec_perm(__a, __b,
5580 (vector unsigned char)(0x08, 0x09, 0x0A, 0x0B, 0x18, 0x19,
5581 0x1A, 0x1B, 0x0C, 0x0D, 0x0E, 0x0F,
5582 0x1C, 0x1D, 0x1E, 0x1F));
5583}
5584
5585static __inline__ vector unsigned int __ATTRS_o_ai
5586vec_vmrglw(vector unsigned int __a, vector unsigned int __b) {
5587 return vec_perm(__a, __b,
5588 (vector unsigned char)(0x08, 0x09, 0x0A, 0x0B, 0x18, 0x19,
5589 0x1A, 0x1B, 0x0C, 0x0D, 0x0E, 0x0F,
5590 0x1C, 0x1D, 0x1E, 0x1F));
5591}
5592
5593static __inline__ vector bool int __ATTRS_o_ai vec_vmrglw(vector bool int __a,
5594 vector bool int __b) {
5595 return vec_perm(__a, __b,
5596 (vector unsigned char)(0x08, 0x09, 0x0A, 0x0B, 0x18, 0x19,
5597 0x1A, 0x1B, 0x0C, 0x0D, 0x0E, 0x0F,
5598 0x1C, 0x1D, 0x1E, 0x1F));
5599}
5600
5601static __inline__ vector float __ATTRS_o_ai vec_vmrglw(vector float __a,
5602 vector float __b) {
5603 return vec_perm(__a, __b,
5604 (vector unsigned char)(0x08, 0x09, 0x0A, 0x0B, 0x18, 0x19,
5605 0x1A, 0x1B, 0x0C, 0x0D, 0x0E, 0x0F,
5606 0x1C, 0x1D, 0x1E, 0x1F));
5607}
5608
5609#ifdef __POWER8_VECTOR__
5610/* vec_mergee */
5611
5612static __inline__ vector bool int __ATTRS_o_ai vec_mergee(vector bool int __a,
5613 vector bool int __b) {
5614 return vec_perm(__a, __b,
5615 (vector unsigned char)(0x00, 0x01, 0x02, 0x03, 0x10, 0x11,
5616 0x12, 0x13, 0x08, 0x09, 0x0A, 0x0B,
5617 0x18, 0x19, 0x1A, 0x1B));
5618}
5619
5620static __inline__ vector signed int __ATTRS_o_ai
5621vec_mergee(vector signed int __a, vector signed int __b) {
5622 return vec_perm(__a, __b,
5623 (vector unsigned char)(0x00, 0x01, 0x02, 0x03, 0x10, 0x11,
5624 0x12, 0x13, 0x08, 0x09, 0x0A, 0x0B,
5625 0x18, 0x19, 0x1A, 0x1B));
5626}
5627
5628static __inline__ vector unsigned int __ATTRS_o_ai
5629vec_mergee(vector unsigned int __a, vector unsigned int __b) {
5630 return vec_perm(__a, __b,
5631 (vector unsigned char)(0x00, 0x01, 0x02, 0x03, 0x10, 0x11,
5632 0x12, 0x13, 0x08, 0x09, 0x0A, 0x0B,
5633 0x18, 0x19, 0x1A, 0x1B));
5634}
5635
5636static __inline__ vector bool long long __ATTRS_o_ai
5637vec_mergee(vector bool long long __a, vector bool long long __b) {
5638 return vec_mergeh(__a, __b);
5639}
5640
5641static __inline__ vector signed long long __ATTRS_o_ai
5642vec_mergee(vector signed long long __a, vector signed long long __b) {
5643 return vec_mergeh(__a, __b);
5644}
5645
5646static __inline__ vector unsigned long long __ATTRS_o_ai
5647vec_mergee(vector unsigned long long __a, vector unsigned long long __b) {
5648 return vec_mergeh(__a, __b);
5649}
5650
5651static __inline__ vector float __ATTRS_o_ai
5652vec_mergee(vector float __a, vector float __b) {
5653 return vec_perm(__a, __b,
5654 (vector unsigned char)(0x00, 0x01, 0x02, 0x03, 0x10, 0x11,
5655 0x12, 0x13, 0x08, 0x09, 0x0A, 0x0B,
5656 0x18, 0x19, 0x1A, 0x1B));
5657}
5658
5659static __inline__ vector double __ATTRS_o_ai
5660vec_mergee(vector double __a, vector double __b) {
5661 return vec_mergeh(__a, __b);
5662}
5663
5664/* vec_mergeo */
5665
5666static __inline__ vector bool int __ATTRS_o_ai vec_mergeo(vector bool int __a,
5667 vector bool int __b) {
5668 return vec_perm(__a, __b,
5669 (vector unsigned char)(0x04, 0x05, 0x06, 0x07, 0x14, 0x15,
5670 0x16, 0x17, 0x0C, 0x0D, 0x0E, 0x0F,
5671 0x1C, 0x1D, 0x1E, 0x1F));
5672}
5673
5674static __inline__ vector signed int __ATTRS_o_ai
5675vec_mergeo(vector signed int __a, vector signed int __b) {
5676 return vec_perm(__a, __b,
5677 (vector unsigned char)(0x04, 0x05, 0x06, 0x07, 0x14, 0x15,
5678 0x16, 0x17, 0x0C, 0x0D, 0x0E, 0x0F,
5679 0x1C, 0x1D, 0x1E, 0x1F));
5680}
5681
5682static __inline__ vector unsigned int __ATTRS_o_ai
5683vec_mergeo(vector unsigned int __a, vector unsigned int __b) {
5684 return vec_perm(__a, __b,
5685 (vector unsigned char)(0x04, 0x05, 0x06, 0x07, 0x14, 0x15,
5686 0x16, 0x17, 0x0C, 0x0D, 0x0E, 0x0F,
5687 0x1C, 0x1D, 0x1E, 0x1F));
5688}
5689
5690static __inline__ vector bool long long __ATTRS_o_ai
5691vec_mergeo(vector bool long long __a, vector bool long long __b) {
5692 return vec_mergel(__a, __b);
5693}
5694
5695static __inline__ vector signed long long __ATTRS_o_ai
5696vec_mergeo(vector signed long long __a, vector signed long long __b) {
5697 return vec_mergel(__a, __b);
5698}
5699
5700static __inline__ vector unsigned long long __ATTRS_o_ai
5701vec_mergeo(vector unsigned long long __a, vector unsigned long long __b) {
5702 return vec_mergel(__a, __b);
5703}
5704
5705static __inline__ vector float __ATTRS_o_ai
5706vec_mergeo(vector float __a, vector float __b) {
5707 return vec_perm(__a, __b,
5708 (vector unsigned char)(0x04, 0x05, 0x06, 0x07, 0x14, 0x15,
5709 0x16, 0x17, 0x0C, 0x0D, 0x0E, 0x0F,
5710 0x1C, 0x1D, 0x1E, 0x1F));
5711}
5712
5713static __inline__ vector double __ATTRS_o_ai
5714vec_mergeo(vector double __a, vector double __b) {
5715 return vec_mergel(__a, __b);
5716}
5717
5718#endif
5719
5720/* vec_mfvscr */
5721
5722static __inline__ vector unsigned short __attribute__((__always_inline__))
5723vec_mfvscr(void) {
5724 return __builtin_altivec_mfvscr();
5725}
5726
5727/* vec_min */
5728
5729static __inline__ vector signed char __ATTRS_o_ai
5730vec_min(vector signed char __a, vector signed char __b) {
5731 return __builtin_altivec_vminsb(__a, __b);
5732}
5733
5734static __inline__ vector signed char __ATTRS_o_ai
5735vec_min(vector bool char __a, vector signed char __b) {
5736 return __builtin_altivec_vminsb((vector signed char)__a, __b);
5737}
5738
5739static __inline__ vector signed char __ATTRS_o_ai
5740vec_min(vector signed char __a, vector bool char __b) {
5741 return __builtin_altivec_vminsb(__a, (vector signed char)__b);
5742}
5743
5744static __inline__ vector unsigned char __ATTRS_o_ai
5745vec_min(vector unsigned char __a, vector unsigned char __b) {
5746 return __builtin_altivec_vminub(__a, __b);
5747}
5748
5749static __inline__ vector unsigned char __ATTRS_o_ai
5750vec_min(vector bool char __a, vector unsigned char __b) {
5751 return __builtin_altivec_vminub((vector unsigned char)__a, __b);
5752}
5753
5754static __inline__ vector unsigned char __ATTRS_o_ai
5755vec_min(vector unsigned char __a, vector bool char __b) {
5756 return __builtin_altivec_vminub(__a, (vector unsigned char)__b);
5757}
5758
5759static __inline__ vector short __ATTRS_o_ai vec_min(vector short __a,
5760 vector short __b) {
5761 return __builtin_altivec_vminsh(__a, __b);
5762}
5763
5764static __inline__ vector short __ATTRS_o_ai vec_min(vector bool short __a,
5765 vector short __b) {
5766 return __builtin_altivec_vminsh((vector short)__a, __b);
5767}
5768
5769static __inline__ vector short __ATTRS_o_ai vec_min(vector short __a,
5770 vector bool short __b) {
5771 return __builtin_altivec_vminsh(__a, (vector short)__b);
5772}
5773
5774static __inline__ vector unsigned short __ATTRS_o_ai
5775vec_min(vector unsigned short __a, vector unsigned short __b) {
5776 return __builtin_altivec_vminuh(__a, __b);
5777}
5778
5779static __inline__ vector unsigned short __ATTRS_o_ai
5780vec_min(vector bool short __a, vector unsigned short __b) {
5781 return __builtin_altivec_vminuh((vector unsigned short)__a, __b);
5782}
5783
5784static __inline__ vector unsigned short __ATTRS_o_ai
5785vec_min(vector unsigned short __a, vector bool short __b) {
5786 return __builtin_altivec_vminuh(__a, (vector unsigned short)__b);
5787}
5788
5789static __inline__ vector int __ATTRS_o_ai vec_min(vector int __a,
5790 vector int __b) {
5791 return __builtin_altivec_vminsw(__a, __b);
5792}
5793
5794static __inline__ vector int __ATTRS_o_ai vec_min(vector bool int __a,
5795 vector int __b) {
5796 return __builtin_altivec_vminsw((vector int)__a, __b);
5797}
5798
5799static __inline__ vector int __ATTRS_o_ai vec_min(vector int __a,
5800 vector bool int __b) {
5801 return __builtin_altivec_vminsw(__a, (vector int)__b);
5802}
5803
5804static __inline__ vector unsigned int __ATTRS_o_ai
5805vec_min(vector unsigned int __a, vector unsigned int __b) {
5806 return __builtin_altivec_vminuw(__a, __b);
5807}
5808
5809static __inline__ vector unsigned int __ATTRS_o_ai
5810vec_min(vector bool int __a, vector unsigned int __b) {
5811 return __builtin_altivec_vminuw((vector unsigned int)__a, __b);
5812}
5813
5814static __inline__ vector unsigned int __ATTRS_o_ai
5815vec_min(vector unsigned int __a, vector bool int __b) {
5816 return __builtin_altivec_vminuw(__a, (vector unsigned int)__b);
5817}
5818
5819#ifdef __POWER8_VECTOR__
5820static __inline__ vector signed long long __ATTRS_o_ai
5821vec_min(vector signed long long __a, vector signed long long __b) {
5822 return __builtin_altivec_vminsd(__a, __b);
5823}
5824
5825static __inline__ vector signed long long __ATTRS_o_ai
5826vec_min(vector bool long long __a, vector signed long long __b) {
5827 return __builtin_altivec_vminsd((vector signed long long)__a, __b);
5828}
5829
5830static __inline__ vector signed long long __ATTRS_o_ai
5831vec_min(vector signed long long __a, vector bool long long __b) {
5832 return __builtin_altivec_vminsd(__a, (vector signed long long)__b);
5833}
5834
5835static __inline__ vector unsigned long long __ATTRS_o_ai
5836vec_min(vector unsigned long long __a, vector unsigned long long __b) {
5837 return __builtin_altivec_vminud(__a, __b);
5838}
5839
5840static __inline__ vector unsigned long long __ATTRS_o_ai
5841vec_min(vector bool long long __a, vector unsigned long long __b) {
5842 return __builtin_altivec_vminud((vector unsigned long long)__a, __b);
5843}
5844
5845static __inline__ vector unsigned long long __ATTRS_o_ai
5846vec_min(vector unsigned long long __a, vector bool long long __b) {
5847 return __builtin_altivec_vminud(__a, (vector unsigned long long)__b);
5848}
5849#endif
5850
5851static __inline__ vector float __ATTRS_o_ai vec_min(vector float __a,
5852 vector float __b) {
5853#ifdef __VSX__
5854 return __builtin_vsx_xvminsp(__a, __b);
5855#else
5856 return __builtin_altivec_vminfp(__a, __b);
5857#endif
5858}
5859
5860#ifdef __VSX__
5861static __inline__ vector double __ATTRS_o_ai vec_min(vector double __a,
5862 vector double __b) {
5863 return __builtin_vsx_xvmindp(__a, __b);
5864}
5865#endif
5866
5867/* vec_vminsb */
5868
5869static __inline__ vector signed char __ATTRS_o_ai
5870vec_vminsb(vector signed char __a, vector signed char __b) {
5871 return __builtin_altivec_vminsb(__a, __b);
5872}
5873
5874static __inline__ vector signed char __ATTRS_o_ai
5875vec_vminsb(vector bool char __a, vector signed char __b) {
5876 return __builtin_altivec_vminsb((vector signed char)__a, __b);
5877}
5878
5879static __inline__ vector signed char __ATTRS_o_ai
5880vec_vminsb(vector signed char __a, vector bool char __b) {
5881 return __builtin_altivec_vminsb(__a, (vector signed char)__b);
5882}
5883
5884/* vec_vminub */
5885
5886static __inline__ vector unsigned char __ATTRS_o_ai
5887vec_vminub(vector unsigned char __a, vector unsigned char __b) {
5888 return __builtin_altivec_vminub(__a, __b);
5889}
5890
5891static __inline__ vector unsigned char __ATTRS_o_ai
5892vec_vminub(vector bool char __a, vector unsigned char __b) {
5893 return __builtin_altivec_vminub((vector unsigned char)__a, __b);
5894}
5895
5896static __inline__ vector unsigned char __ATTRS_o_ai
5897vec_vminub(vector unsigned char __a, vector bool char __b) {
5898 return __builtin_altivec_vminub(__a, (vector unsigned char)__b);
5899}
5900
5901/* vec_vminsh */
5902
5903static __inline__ vector short __ATTRS_o_ai vec_vminsh(vector short __a,
5904 vector short __b) {
5905 return __builtin_altivec_vminsh(__a, __b);
5906}
5907
5908static __inline__ vector short __ATTRS_o_ai vec_vminsh(vector bool short __a,
5909 vector short __b) {
5910 return __builtin_altivec_vminsh((vector short)__a, __b);
5911}
5912
5913static __inline__ vector short __ATTRS_o_ai vec_vminsh(vector short __a,
5914 vector bool short __b) {
5915 return __builtin_altivec_vminsh(__a, (vector short)__b);
5916}
5917
5918/* vec_vminuh */
5919
5920static __inline__ vector unsigned short __ATTRS_o_ai
5921vec_vminuh(vector unsigned short __a, vector unsigned short __b) {
5922 return __builtin_altivec_vminuh(__a, __b);
5923}
5924
5925static __inline__ vector unsigned short __ATTRS_o_ai
5926vec_vminuh(vector bool short __a, vector unsigned short __b) {
5927 return __builtin_altivec_vminuh((vector unsigned short)__a, __b);
5928}
5929
5930static __inline__ vector unsigned short __ATTRS_o_ai
5931vec_vminuh(vector unsigned short __a, vector bool short __b) {
5932 return __builtin_altivec_vminuh(__a, (vector unsigned short)__b);
5933}
5934
5935/* vec_vminsw */
5936
5937static __inline__ vector int __ATTRS_o_ai vec_vminsw(vector int __a,
5938 vector int __b) {
5939 return __builtin_altivec_vminsw(__a, __b);
5940}
5941
5942static __inline__ vector int __ATTRS_o_ai vec_vminsw(vector bool int __a,
5943 vector int __b) {
5944 return __builtin_altivec_vminsw((vector int)__a, __b);
5945}
5946
5947static __inline__ vector int __ATTRS_o_ai vec_vminsw(vector int __a,
5948 vector bool int __b) {
5949 return __builtin_altivec_vminsw(__a, (vector int)__b);
5950}
5951
5952/* vec_vminuw */
5953
5954static __inline__ vector unsigned int __ATTRS_o_ai
5955vec_vminuw(vector unsigned int __a, vector unsigned int __b) {
5956 return __builtin_altivec_vminuw(__a, __b);
5957}
5958
5959static __inline__ vector unsigned int __ATTRS_o_ai
5960vec_vminuw(vector bool int __a, vector unsigned int __b) {
5961 return __builtin_altivec_vminuw((vector unsigned int)__a, __b);
5962}
5963
5964static __inline__ vector unsigned int __ATTRS_o_ai
5965vec_vminuw(vector unsigned int __a, vector bool int __b) {
5966 return __builtin_altivec_vminuw(__a, (vector unsigned int)__b);
5967}
5968
5969/* vec_vminfp */
5970
5971static __inline__ vector float __attribute__((__always_inline__))
5972vec_vminfp(vector float __a, vector float __b) {
5973#ifdef __VSX__
5974 return __builtin_vsx_xvminsp(__a, __b);
5975#else
5976 return __builtin_altivec_vminfp(__a, __b);
5977#endif
5978}
5979
5980/* vec_mladd */
5981
5982#define __builtin_altivec_vmladduhm vec_mladd
5983
5984static __inline__ vector short __ATTRS_o_ai vec_mladd(vector short __a,
5985 vector short __b,
5986 vector short __c) {
5987 return __a * __b + __c;
5988}
5989
5990static __inline__ vector short __ATTRS_o_ai vec_mladd(
5991 vector short __a, vector unsigned short __b, vector unsigned short __c) {
5992 return __a * (vector short)__b + (vector short)__c;
5993}
5994
5995static __inline__ vector short __ATTRS_o_ai vec_mladd(vector unsigned short __a,
5996 vector short __b,
5997 vector short __c) {
5998 return (vector short)__a * __b + __c;
5999}
6000
6001static __inline__ vector unsigned short __ATTRS_o_ai
6002vec_mladd(vector unsigned short __a, vector unsigned short __b,
6003 vector unsigned short __c) {
6004 return __a * __b + __c;
6005}
6006
6007/* vec_vmladduhm */
6008
6009static __inline__ vector short __ATTRS_o_ai vec_vmladduhm(vector short __a,
6010 vector short __b,
6011 vector short __c) {
6012 return __a * __b + __c;
6013}
6014
6015static __inline__ vector short __ATTRS_o_ai vec_vmladduhm(
6016 vector short __a, vector unsigned short __b, vector unsigned short __c) {
6017 return __a * (vector short)__b + (vector short)__c;
6018}
6019
6020static __inline__ vector short __ATTRS_o_ai
6021vec_vmladduhm(vector unsigned short __a, vector short __b, vector short __c) {
6022 return (vector short)__a * __b + __c;
6023}
6024
6025static __inline__ vector unsigned short __ATTRS_o_ai
6026vec_vmladduhm(vector unsigned short __a, vector unsigned short __b,
6027 vector unsigned short __c) {
6028 return __a * __b + __c;
6029}
6030
6031/* vec_mradds */
6032
6033static __inline__ vector short __attribute__((__always_inline__))
6034vec_mradds(vector short __a, vector short __b, vector short __c) {
6035 return __builtin_altivec_vmhraddshs(__a, __b, __c);
6036}
6037
6038/* vec_vmhraddshs */
6039
6040static __inline__ vector short __attribute__((__always_inline__))
6041vec_vmhraddshs(vector short __a, vector short __b, vector short __c) {
6042 return __builtin_altivec_vmhraddshs(__a, __b, __c);
6043}
6044
6045/* vec_msum */
6046
6047static __inline__ vector int __ATTRS_o_ai vec_msum(vector signed char __a,
6048 vector unsigned char __b,
6049 vector int __c) {
6050 return __builtin_altivec_vmsummbm(__a, __b, __c);
6051}
6052
6053static __inline__ vector unsigned int __ATTRS_o_ai
6054vec_msum(vector unsigned char __a, vector unsigned char __b,
6055 vector unsigned int __c) {
6056 return __builtin_altivec_vmsumubm(__a, __b, __c);
6057}
6058
6059static __inline__ vector int __ATTRS_o_ai vec_msum(vector short __a,
6060 vector short __b,
6061 vector int __c) {
6062 return __builtin_altivec_vmsumshm(__a, __b, __c);
6063}
6064
6065static __inline__ vector unsigned int __ATTRS_o_ai
6066vec_msum(vector unsigned short __a, vector unsigned short __b,
6067 vector unsigned int __c) {
6068 return __builtin_altivec_vmsumuhm(__a, __b, __c);
6069}
6070
6071/* vec_msumc */
6072
6073#if defined(__POWER10_VECTOR__) && defined(__SIZEOF_INT128__)
6074static __inline__ vector unsigned __int128 __ATTRS_o_ai
6075vec_msumc(vector unsigned long long __a, vector unsigned long long __b,
6076 vector unsigned __int128 __c) {
6077 return __builtin_altivec_vmsumcud(__a, __b, __c);
6078}
6079#endif
6080
6081/* vec_vmsummbm */
6082
6083static __inline__ vector int __attribute__((__always_inline__))
6084vec_vmsummbm(vector signed char __a, vector unsigned char __b, vector int __c) {
6085 return __builtin_altivec_vmsummbm(__a, __b, __c);
6086}
6087
6088/* vec_vmsumubm */
6089
6090static __inline__ vector unsigned int __attribute__((__always_inline__))
6091vec_vmsumubm(vector unsigned char __a, vector unsigned char __b,
6092 vector unsigned int __c) {
6093 return __builtin_altivec_vmsumubm(__a, __b, __c);
6094}
6095
6096/* vec_vmsumshm */
6097
6098static __inline__ vector int __attribute__((__always_inline__))
6099vec_vmsumshm(vector short __a, vector short __b, vector int __c) {
6100 return __builtin_altivec_vmsumshm(__a, __b, __c);
6101}
6102
6103/* vec_vmsumuhm */
6104
6105static __inline__ vector unsigned int __attribute__((__always_inline__))
6106vec_vmsumuhm(vector unsigned short __a, vector unsigned short __b,
6107 vector unsigned int __c) {
6108 return __builtin_altivec_vmsumuhm(__a, __b, __c);
6109}
6110
6111/* vec_msums */
6112
6113static __inline__ vector int __ATTRS_o_ai vec_msums(vector short __a,
6114 vector short __b,
6115 vector int __c) {
6116 return __builtin_altivec_vmsumshs(__a, __b, __c);
6117}
6118
6119static __inline__ vector unsigned int __ATTRS_o_ai
6120vec_msums(vector unsigned short __a, vector unsigned short __b,
6121 vector unsigned int __c) {
6122 return __builtin_altivec_vmsumuhs(__a, __b, __c);
6123}
6124
6125/* vec_vmsumshs */
6126
6127static __inline__ vector int __attribute__((__always_inline__))
6128vec_vmsumshs(vector short __a, vector short __b, vector int __c) {
6129 return __builtin_altivec_vmsumshs(__a, __b, __c);
6130}
6131
6132/* vec_vmsumuhs */
6133
6134static __inline__ vector unsigned int __attribute__((__always_inline__))
6135vec_vmsumuhs(vector unsigned short __a, vector unsigned short __b,
6136 vector unsigned int __c) {
6137 return __builtin_altivec_vmsumuhs(__a, __b, __c);
6138}
6139
6140/* vec_mtvscr */
6141
6142static __inline__ void __ATTRS_o_ai vec_mtvscr(vector signed char __a) {
6143 __builtin_altivec_mtvscr((vector int)__a);
6144}
6145
6146static __inline__ void __ATTRS_o_ai vec_mtvscr(vector unsigned char __a) {
6147 __builtin_altivec_mtvscr((vector int)__a);
6148}
6149
6150static __inline__ void __ATTRS_o_ai vec_mtvscr(vector bool char __a) {
6151 __builtin_altivec_mtvscr((vector int)__a);
6152}
6153
6154static __inline__ void __ATTRS_o_ai vec_mtvscr(vector short __a) {
6155 __builtin_altivec_mtvscr((vector int)__a);
6156}
6157
6158static __inline__ void __ATTRS_o_ai vec_mtvscr(vector unsigned short __a) {
6159 __builtin_altivec_mtvscr((vector int)__a);
6160}
6161
6162static __inline__ void __ATTRS_o_ai vec_mtvscr(vector bool short __a) {
6163 __builtin_altivec_mtvscr((vector int)__a);
6164}
6165
6166static __inline__ void __ATTRS_o_ai vec_mtvscr(vector pixel __a) {
6167 __builtin_altivec_mtvscr((vector int)__a);
6168}
6169
6170static __inline__ void __ATTRS_o_ai vec_mtvscr(vector int __a) {
6171 __builtin_altivec_mtvscr((vector int)__a);
6172}
6173
6174static __inline__ void __ATTRS_o_ai vec_mtvscr(vector unsigned int __a) {
6175 __builtin_altivec_mtvscr((vector int)__a);
6176}
6177
6178static __inline__ void __ATTRS_o_ai vec_mtvscr(vector bool int __a) {
6179 __builtin_altivec_mtvscr((vector int)__a);
6180}
6181
6182static __inline__ void __ATTRS_o_ai vec_mtvscr(vector float __a) {
6183 __builtin_altivec_mtvscr((vector int)__a);
6184}
6185
6186/* vec_mul */
6187
6188/* Integer vector multiplication will involve multiplication of the odd/even
6189 elements separately, then truncating the results and moving to the
6190 result vector.
6191*/
6192static __inline__ vector signed char __ATTRS_o_ai
6193vec_mul(vector signed char __a, vector signed char __b) {
6194 return __a * __b;
6195}
6196
6197static __inline__ vector unsigned char __ATTRS_o_ai
6198vec_mul(vector unsigned char __a, vector unsigned char __b) {
6199 return __a * __b;
6200}
6201
6202static __inline__ vector signed short __ATTRS_o_ai
6203vec_mul(vector signed short __a, vector signed short __b) {
6204 return __a * __b;
6205}
6206
6207static __inline__ vector unsigned short __ATTRS_o_ai
6208vec_mul(vector unsigned short __a, vector unsigned short __b) {
6209 return __a * __b;
6210}
6211
6212static __inline__ vector signed int __ATTRS_o_ai
6213vec_mul(vector signed int __a, vector signed int __b) {
6214 return __a * __b;
6215}
6216
6217static __inline__ vector unsigned int __ATTRS_o_ai
6218vec_mul(vector unsigned int __a, vector unsigned int __b) {
6219 return __a * __b;
6220}
6221
6222#ifdef __VSX__
6223static __inline__ vector signed long long __ATTRS_o_ai
6224vec_mul(vector signed long long __a, vector signed long long __b) {
6225 return __a * __b;
6226}
6227
6228static __inline__ vector unsigned long long __ATTRS_o_ai
6229vec_mul(vector unsigned long long __a, vector unsigned long long __b) {
6230 return __a * __b;
6231}
6232#endif
6233
6234static __inline__ vector float __ATTRS_o_ai vec_mul(vector float __a,
6235 vector float __b) {
6236 return __a * __b;
6237}
6238
6239#ifdef __VSX__
6240static __inline__ vector double __ATTRS_o_ai vec_mul(vector double __a,
6241 vector double __b) {
6242 return __a * __b;
6243}
6244#endif
6245
6246/* The vmulos* and vmules* instructions have a big endian bias, so
6247 we must reverse the meaning of "even" and "odd" for little endian. */
6248
6249/* vec_mule */
6250
6251static __inline__ vector short __ATTRS_o_ai vec_mule(vector signed char __a,
6252 vector signed char __b) {
6253#ifdef __LITTLE_ENDIAN__
6254 return __builtin_altivec_vmulosb(__a, __b);
6255#else
6256 return __builtin_altivec_vmulesb(__a, __b);
6257#endif
6258}
6259
6260static __inline__ vector unsigned short __ATTRS_o_ai
6261vec_mule(vector unsigned char __a, vector unsigned char __b) {
6262#ifdef __LITTLE_ENDIAN__
6263 return __builtin_altivec_vmuloub(__a, __b);
6264#else
6265 return __builtin_altivec_vmuleub(__a, __b);
6266#endif
6267}
6268
6269static __inline__ vector int __ATTRS_o_ai vec_mule(vector short __a,
6270 vector short __b) {
6271#ifdef __LITTLE_ENDIAN__
6272 return __builtin_altivec_vmulosh(__a, __b);
6273#else
6274 return __builtin_altivec_vmulesh(__a, __b);
6275#endif
6276}
6277
6278static __inline__ vector unsigned int __ATTRS_o_ai
6279vec_mule(vector unsigned short __a, vector unsigned short __b) {
6280#ifdef __LITTLE_ENDIAN__
6281 return __builtin_altivec_vmulouh(__a, __b);
6282#else
6283 return __builtin_altivec_vmuleuh(__a, __b);
6284#endif
6285}
6286
6287#ifdef __POWER8_VECTOR__
6288static __inline__ vector signed long long __ATTRS_o_ai
6289vec_mule(vector signed int __a, vector signed int __b) {
6290#ifdef __LITTLE_ENDIAN__
6291 return __builtin_altivec_vmulosw(__a, __b);
6292#else
6293 return __builtin_altivec_vmulesw(__a, __b);
6294#endif
6295}
6296
6297static __inline__ vector unsigned long long __ATTRS_o_ai
6298vec_mule(vector unsigned int __a, vector unsigned int __b) {
6299#ifdef __LITTLE_ENDIAN__
6300 return __builtin_altivec_vmulouw(__a, __b);
6301#else
6302 return __builtin_altivec_vmuleuw(__a, __b);
6303#endif
6304}
6305#endif
6306
6307#if defined(__POWER10_VECTOR__) && defined(__SIZEOF_INT128__)
6308static __inline__ vector signed __int128 __ATTRS_o_ai
6309vec_mule(vector signed long long __a, vector signed long long __b) {
6310#ifdef __LITTLE_ENDIAN__
6311 return __builtin_altivec_vmulosd(__a, __b);
6312#else
6313 return __builtin_altivec_vmulesd(__a, __b);
6314#endif
6315}
6316
6317static __inline__ vector unsigned __int128 __ATTRS_o_ai
6318vec_mule(vector unsigned long long __a, vector unsigned long long __b) {
6319#ifdef __LITTLE_ENDIAN__
6320 return __builtin_altivec_vmuloud(__a, __b);
6321#else
6322 return __builtin_altivec_vmuleud(__a, __b);
6323#endif
6324}
6325#endif
6326
6327/* vec_vmulesb */
6328
6329static __inline__ vector short __attribute__((__always_inline__))
6330vec_vmulesb(vector signed char __a, vector signed char __b) {
6331#ifdef __LITTLE_ENDIAN__
6332 return __builtin_altivec_vmulosb(__a, __b);
6333#else
6334 return __builtin_altivec_vmulesb(__a, __b);
6335#endif
6336}
6337
6338/* vec_vmuleub */
6339
6340static __inline__ vector unsigned short __attribute__((__always_inline__))
6341vec_vmuleub(vector unsigned char __a, vector unsigned char __b) {
6342#ifdef __LITTLE_ENDIAN__
6343 return __builtin_altivec_vmuloub(__a, __b);
6344#else
6345 return __builtin_altivec_vmuleub(__a, __b);
6346#endif
6347}
6348
6349/* vec_vmulesh */
6350
6351static __inline__ vector int __attribute__((__always_inline__))
6352vec_vmulesh(vector short __a, vector short __b) {
6353#ifdef __LITTLE_ENDIAN__
6354 return __builtin_altivec_vmulosh(__a, __b);
6355#else
6356 return __builtin_altivec_vmulesh(__a, __b);
6357#endif
6358}
6359
6360/* vec_vmuleuh */
6361
6362static __inline__ vector unsigned int __attribute__((__always_inline__))
6363vec_vmuleuh(vector unsigned short __a, vector unsigned short __b) {
6364#ifdef __LITTLE_ENDIAN__
6365 return __builtin_altivec_vmulouh(__a, __b);
6366#else
6367 return __builtin_altivec_vmuleuh(__a, __b);
6368#endif
6369}
6370
6371/* vec_mulh */
6372
6373#ifdef __POWER10_VECTOR__
6374static __inline__ vector signed int __ATTRS_o_ai
6375vec_mulh(vector signed int __a, vector signed int __b) {
6376 return __builtin_altivec_vmulhsw(__a, __b);
6377}
6378
6379static __inline__ vector unsigned int __ATTRS_o_ai
6380vec_mulh(vector unsigned int __a, vector unsigned int __b) {
6381 return __builtin_altivec_vmulhuw(__a, __b);
6382}
6383
6384static __inline__ vector signed long long __ATTRS_o_ai
6385vec_mulh(vector signed long long __a, vector signed long long __b) {
6386 return __builtin_altivec_vmulhsd(__a, __b);
6387}
6388
6389static __inline__ vector unsigned long long __ATTRS_o_ai
6390vec_mulh(vector unsigned long long __a, vector unsigned long long __b) {
6391 return __builtin_altivec_vmulhud(__a, __b);
6392}
6393#endif
6394
6395/* vec_mulo */
6396
6397static __inline__ vector short __ATTRS_o_ai vec_mulo(vector signed char __a,
6398 vector signed char __b) {
6399#ifdef __LITTLE_ENDIAN__
6400 return __builtin_altivec_vmulesb(__a, __b);
6401#else
6402 return __builtin_altivec_vmulosb(__a, __b);
6403#endif
6404}
6405
6406static __inline__ vector unsigned short __ATTRS_o_ai
6407vec_mulo(vector unsigned char __a, vector unsigned char __b) {
6408#ifdef __LITTLE_ENDIAN__
6409 return __builtin_altivec_vmuleub(__a, __b);
6410#else
6411 return __builtin_altivec_vmuloub(__a, __b);
6412#endif
6413}
6414
6415static __inline__ vector int __ATTRS_o_ai vec_mulo(vector short __a,
6416 vector short __b) {
6417#ifdef __LITTLE_ENDIAN__
6418 return __builtin_altivec_vmulesh(__a, __b);
6419#else
6420 return __builtin_altivec_vmulosh(__a, __b);
6421#endif
6422}
6423
6424static __inline__ vector unsigned int __ATTRS_o_ai
6425vec_mulo(vector unsigned short __a, vector unsigned short __b) {
6426#ifdef __LITTLE_ENDIAN__
6427 return __builtin_altivec_vmuleuh(__a, __b);
6428#else
6429 return __builtin_altivec_vmulouh(__a, __b);
6430#endif
6431}
6432
6433#ifdef __POWER8_VECTOR__
6434static __inline__ vector signed long long __ATTRS_o_ai
6435vec_mulo(vector signed int __a, vector signed int __b) {
6436#ifdef __LITTLE_ENDIAN__
6437 return __builtin_altivec_vmulesw(__a, __b);
6438#else
6439 return __builtin_altivec_vmulosw(__a, __b);
6440#endif
6441}
6442
6443static __inline__ vector unsigned long long __ATTRS_o_ai
6444vec_mulo(vector unsigned int __a, vector unsigned int __b) {
6445#ifdef __LITTLE_ENDIAN__
6446 return __builtin_altivec_vmuleuw(__a, __b);
6447#else
6448 return __builtin_altivec_vmulouw(__a, __b);
6449#endif
6450}
6451#endif
6452
6453#if defined(__POWER10_VECTOR__) && defined(__SIZEOF_INT128__)
6454static __inline__ vector signed __int128 __ATTRS_o_ai
6455vec_mulo(vector signed long long __a, vector signed long long __b) {
6456#ifdef __LITTLE_ENDIAN__
6457 return __builtin_altivec_vmulesd(__a, __b);
6458#else
6459 return __builtin_altivec_vmulosd(__a, __b);
6460#endif
6461}
6462
6463static __inline__ vector unsigned __int128 __ATTRS_o_ai
6464vec_mulo(vector unsigned long long __a, vector unsigned long long __b) {
6465#ifdef __LITTLE_ENDIAN__
6466 return __builtin_altivec_vmuleud(__a, __b);
6467#else
6468 return __builtin_altivec_vmuloud(__a, __b);
6469#endif
6470}
6471#endif
6472
6473/* vec_vmulosb */
6474
6475static __inline__ vector short __attribute__((__always_inline__))
6476vec_vmulosb(vector signed char __a, vector signed char __b) {
6477#ifdef __LITTLE_ENDIAN__
6478 return __builtin_altivec_vmulesb(__a, __b);
6479#else
6480 return __builtin_altivec_vmulosb(__a, __b);
6481#endif
6482}
6483
6484/* vec_vmuloub */
6485
6486static __inline__ vector unsigned short __attribute__((__always_inline__))
6487vec_vmuloub(vector unsigned char __a, vector unsigned char __b) {
6488#ifdef __LITTLE_ENDIAN__
6489 return __builtin_altivec_vmuleub(__a, __b);
6490#else
6491 return __builtin_altivec_vmuloub(__a, __b);
6492#endif
6493}
6494
6495/* vec_vmulosh */
6496
6497static __inline__ vector int __attribute__((__always_inline__))
6498vec_vmulosh(vector short __a, vector short __b) {
6499#ifdef __LITTLE_ENDIAN__
6500 return __builtin_altivec_vmulesh(__a, __b);
6501#else
6502 return __builtin_altivec_vmulosh(__a, __b);
6503#endif
6504}
6505
6506/* vec_vmulouh */
6507
6508static __inline__ vector unsigned int __attribute__((__always_inline__))
6509vec_vmulouh(vector unsigned short __a, vector unsigned short __b) {
6510#ifdef __LITTLE_ENDIAN__
6511 return __builtin_altivec_vmuleuh(__a, __b);
6512#else
6513 return __builtin_altivec_vmulouh(__a, __b);
6514#endif
6515}
6516
6517/* vec_nand */
6518
6519#ifdef __POWER8_VECTOR__
6520static __inline__ vector signed char __ATTRS_o_ai
6521vec_nand(vector signed char __a, vector signed char __b) {
6522 return ~(__a & __b);
6523}
6524
6525static __inline__ vector signed char __ATTRS_o_ai
6526vec_nand(vector signed char __a, vector bool char __b) {
6527 return ~(__a & (vector signed char)__b);
6528}
6529
6530static __inline__ vector signed char __ATTRS_o_ai
6531vec_nand(vector bool char __a, vector signed char __b) {
6532 return (vector signed char)~(__a & (vector bool char)__b);
6533}
6534
6535static __inline__ vector unsigned char __ATTRS_o_ai
6536vec_nand(vector unsigned char __a, vector unsigned char __b) {
6537 return ~(__a & __b);
6538}
6539
6540static __inline__ vector unsigned char __ATTRS_o_ai
6541vec_nand(vector unsigned char __a, vector bool char __b) {
6542 return ~(__a & (vector unsigned char)__b);
6543}
6544
6545static __inline__ vector unsigned char __ATTRS_o_ai
6546vec_nand(vector bool char __a, vector unsigned char __b) {
6547 return (vector unsigned char)~(__a & (vector bool char)__b);
6548}
6549
6550static __inline__ vector bool char __ATTRS_o_ai vec_nand(vector bool char __a,
6551 vector bool char __b) {
6552 return ~(__a & __b);
6553}
6554
6555static __inline__ vector signed short __ATTRS_o_ai
6556vec_nand(vector signed short __a, vector signed short __b) {
6557 return ~(__a & __b);
6558}
6559
6560static __inline__ vector signed short __ATTRS_o_ai
6561vec_nand(vector signed short __a, vector bool short __b) {
6562 return ~(__a & (vector signed short)__b);
6563}
6564
6565static __inline__ vector signed short __ATTRS_o_ai
6566vec_nand(vector bool short __a, vector signed short __b) {
6567 return (vector signed short)~(__a & (vector bool short)__b);
6568}
6569
6570static __inline__ vector unsigned short __ATTRS_o_ai
6571vec_nand(vector unsigned short __a, vector unsigned short __b) {
6572 return ~(__a & __b);
6573}
6574
6575static __inline__ vector unsigned short __ATTRS_o_ai
6576vec_nand(vector unsigned short __a, vector bool short __b) {
6577 return ~(__a & (vector unsigned short)__b);
6578}
6579
6580static __inline__ vector bool short __ATTRS_o_ai
6581vec_nand(vector bool short __a, vector bool short __b) {
6582 return ~(__a & __b);
6583}
6584
6585static __inline__ vector signed int __ATTRS_o_ai
6586vec_nand(vector signed int __a, vector signed int __b) {
6587 return ~(__a & __b);
6588}
6589
6590static __inline__ vector signed int __ATTRS_o_ai vec_nand(vector signed int __a,
6591 vector bool int __b) {
6592 return ~(__a & (vector signed int)__b);
6593}
6594
6595static __inline__ vector signed int __ATTRS_o_ai
6596vec_nand(vector bool int __a, vector signed int __b) {
6597 return (vector signed int)~(__a & (vector bool int)__b);
6598}
6599
6600static __inline__ vector unsigned int __ATTRS_o_ai
6601vec_nand(vector unsigned int __a, vector unsigned int __b) {
6602 return ~(__a & __b);
6603}
6604
6605static __inline__ vector unsigned int __ATTRS_o_ai
6606vec_nand(vector unsigned int __a, vector bool int __b) {
6607 return ~(__a & (vector unsigned int)__b);
6608}
6609
6610static __inline__ vector unsigned int __ATTRS_o_ai
6611vec_nand(vector bool int __a, vector unsigned int __b) {
6612 return (vector unsigned int)~(__a & (vector bool int)__b);
6613}
6614
6615static __inline__ vector bool int __ATTRS_o_ai vec_nand(vector bool int __a,
6616 vector bool int __b) {
6617 return ~(__a & __b);
6618}
6619
6620static __inline__ vector float __ATTRS_o_ai
6621vec_nand(vector float __a, vector float __b) {
6622 return (vector float)(~((vector unsigned int)__a &
6623 (vector unsigned int)__b));
6624}
6625
6626static __inline__ vector signed long long __ATTRS_o_ai
6627vec_nand(vector signed long long __a, vector signed long long __b) {
6628 return ~(__a & __b);
6629}
6630
6631static __inline__ vector signed long long __ATTRS_o_ai
6632vec_nand(vector signed long long __a, vector bool long long __b) {
6633 return ~(__a & (vector signed long long)__b);
6634}
6635
6636static __inline__ vector signed long long __ATTRS_o_ai
6637vec_nand(vector bool long long __a, vector signed long long __b) {
6638 return (vector signed long long)~(__a & (vector bool long long)__b);
6639}
6640
6641static __inline__ vector unsigned long long __ATTRS_o_ai
6642vec_nand(vector unsigned long long __a, vector unsigned long long __b) {
6643 return ~(__a & __b);
6644}
6645
6646static __inline__ vector unsigned long long __ATTRS_o_ai
6647vec_nand(vector unsigned long long __a, vector bool long long __b) {
6648 return ~(__a & (vector unsigned long long)__b);
6649}
6650
6651static __inline__ vector unsigned long long __ATTRS_o_ai
6652vec_nand(vector bool long long __a, vector unsigned long long __b) {
6653 return (vector unsigned long long)~(__a & (vector bool long long)__b);
6654}
6655
6656static __inline__ vector bool long long __ATTRS_o_ai
6657vec_nand(vector bool long long __a, vector bool long long __b) {
6658 return ~(__a & __b);
6659}
6660
6661static __inline__ vector double __ATTRS_o_ai
6662vec_nand(vector double __a, vector double __b) {
6663 return (vector double)(~((vector unsigned long long)__a &
6664 (vector unsigned long long)__b));
6665}
6666
6667#endif
6668
6669/* vec_nmadd */
6670
6671#ifdef __VSX__
6672static __inline__ vector float __ATTRS_o_ai vec_nmadd(vector float __a,
6673 vector float __b,
6674 vector float __c) {
6675 return __builtin_vsx_xvnmaddasp(__a, __b, __c);
6676}
6677
6678static __inline__ vector double __ATTRS_o_ai vec_nmadd(vector double __a,
6679 vector double __b,
6680 vector double __c) {
6681 return __builtin_vsx_xvnmaddadp(__a, __b, __c);
6682}
6683#endif
6684
6685/* vec_nmsub */
6686
6687static __inline__ vector float __ATTRS_o_ai vec_nmsub(vector float __a,
6688 vector float __b,
6689 vector float __c) {
6690#ifdef __VSX__
6691 return __builtin_vsx_xvnmsubasp(__a, __b, __c);
6692#else
6693 return __builtin_altivec_vnmsubfp(__a, __b, __c);
6694#endif
6695}
6696
6697#ifdef __VSX__
6698static __inline__ vector double __ATTRS_o_ai vec_nmsub(vector double __a,
6699 vector double __b,
6700 vector double __c) {
6701 return __builtin_vsx_xvnmsubadp(__a, __b, __c);
6702}
6703#endif
6704
6705/* vec_vnmsubfp */
6706
6707static __inline__ vector float __attribute__((__always_inline__))
6708vec_vnmsubfp(vector float __a, vector float __b, vector float __c) {
6709 return __builtin_altivec_vnmsubfp(__a, __b, __c);
6710}
6711
6712/* vec_nor */
6713
6714#define __builtin_altivec_vnor vec_nor
6715
6716static __inline__ vector signed char __ATTRS_o_ai
6717vec_nor(vector signed char __a, vector signed char __b) {
6718 return ~(__a | __b);
6719}
6720
6721static __inline__ vector unsigned char __ATTRS_o_ai
6722vec_nor(vector unsigned char __a, vector unsigned char __b) {
6723 return ~(__a | __b);
6724}
6725
6726static __inline__ vector bool char __ATTRS_o_ai vec_nor(vector bool char __a,
6727 vector bool char __b) {
6728 return ~(__a | __b);
6729}
6730
6731static __inline__ vector short __ATTRS_o_ai vec_nor(vector short __a,
6732 vector short __b) {
6733 return ~(__a | __b);
6734}
6735
6736static __inline__ vector unsigned short __ATTRS_o_ai
6737vec_nor(vector unsigned short __a, vector unsigned short __b) {
6738 return ~(__a | __b);
6739}
6740
6741static __inline__ vector bool short __ATTRS_o_ai
6742vec_nor(vector bool short __a, vector bool short __b) {
6743 return ~(__a | __b);
6744}
6745
6746static __inline__ vector int __ATTRS_o_ai vec_nor(vector int __a,
6747 vector int __b) {
6748 return ~(__a | __b);
6749}
6750
6751static __inline__ vector unsigned int __ATTRS_o_ai
6752vec_nor(vector unsigned int __a, vector unsigned int __b) {
6753 return ~(__a | __b);
6754}
6755
6756static __inline__ vector bool int __ATTRS_o_ai vec_nor(vector bool int __a,
6757 vector bool int __b) {
6758 return ~(__a | __b);
6759}
6760
6761static __inline__ vector float __ATTRS_o_ai vec_nor(vector float __a,
6762 vector float __b) {
6763 vector unsigned int __res =
6764 ~((vector unsigned int)__a | (vector unsigned int)__b);
6765 return (vector float)__res;
6766}
6767
6768#ifdef __VSX__
6769static __inline__ vector double __ATTRS_o_ai vec_nor(vector double __a,
6770 vector double __b) {
6771 vector unsigned long long __res =
6772 ~((vector unsigned long long)__a | (vector unsigned long long)__b);
6773 return (vector double)__res;
6774}
6775#endif
6776
6777/* vec_vnor */
6778
6779static __inline__ vector signed char __ATTRS_o_ai
6780vec_vnor(vector signed char __a, vector signed char __b) {
6781 return ~(__a | __b);
6782}
6783
6784static __inline__ vector unsigned char __ATTRS_o_ai
6785vec_vnor(vector unsigned char __a, vector unsigned char __b) {
6786 return ~(__a | __b);
6787}
6788
6789static __inline__ vector bool char __ATTRS_o_ai vec_vnor(vector bool char __a,
6790 vector bool char __b) {
6791 return ~(__a | __b);
6792}
6793
6794static __inline__ vector short __ATTRS_o_ai vec_vnor(vector short __a,
6795 vector short __b) {
6796 return ~(__a | __b);
6797}
6798
6799static __inline__ vector unsigned short __ATTRS_o_ai
6800vec_vnor(vector unsigned short __a, vector unsigned short __b) {
6801 return ~(__a | __b);
6802}
6803
6804static __inline__ vector bool short __ATTRS_o_ai
6805vec_vnor(vector bool short __a, vector bool short __b) {
6806 return ~(__a | __b);
6807}
6808
6809static __inline__ vector int __ATTRS_o_ai vec_vnor(vector int __a,
6810 vector int __b) {
6811 return ~(__a | __b);
6812}
6813
6814static __inline__ vector unsigned int __ATTRS_o_ai
6815vec_vnor(vector unsigned int __a, vector unsigned int __b) {
6816 return ~(__a | __b);
6817}
6818
6819static __inline__ vector bool int __ATTRS_o_ai vec_vnor(vector bool int __a,
6820 vector bool int __b) {
6821 return ~(__a | __b);
6822}
6823
6824static __inline__ vector float __ATTRS_o_ai vec_vnor(vector float __a,
6825 vector float __b) {
6826 vector unsigned int __res =
6827 ~((vector unsigned int)__a | (vector unsigned int)__b);
6828 return (vector float)__res;
6829}
6830
6831#ifdef __VSX__
6832static __inline__ vector signed long long __ATTRS_o_ai
6833vec_nor(vector signed long long __a, vector signed long long __b) {
6834 return ~(__a | __b);
6835}
6836
6837static __inline__ vector unsigned long long __ATTRS_o_ai
6838vec_nor(vector unsigned long long __a, vector unsigned long long __b) {
6839 return ~(__a | __b);
6840}
6841
6842static __inline__ vector bool long long __ATTRS_o_ai
6843vec_nor(vector bool long long __a, vector bool long long __b) {
6844 return ~(__a | __b);
6845}
6846#endif
6847
6848/* vec_or */
6849
6850#define __builtin_altivec_vor vec_or
6851
6852static __inline__ vector signed char __ATTRS_o_ai
6853vec_or(vector signed char __a, vector signed char __b) {
6854 return __a | __b;
6855}
6856
6857static __inline__ vector signed char __ATTRS_o_ai
6858vec_or(vector bool char __a, vector signed char __b) {
6859 return (vector signed char)__a | __b;
6860}
6861
6862static __inline__ vector signed char __ATTRS_o_ai vec_or(vector signed char __a,
6863 vector bool char __b) {
6864 return __a | (vector signed char)__b;
6865}
6866
6867static __inline__ vector unsigned char __ATTRS_o_ai
6868vec_or(vector unsigned char __a, vector unsigned char __b) {
6869 return __a | __b;
6870}
6871
6872static __inline__ vector unsigned char __ATTRS_o_ai
6873vec_or(vector bool char __a, vector unsigned char __b) {
6874 return (vector unsigned char)__a | __b;
6875}
6876
6877static __inline__ vector unsigned char __ATTRS_o_ai
6878vec_or(vector unsigned char __a, vector bool char __b) {
6879 return __a | (vector unsigned char)__b;
6880}
6881
6882static __inline__ vector bool char __ATTRS_o_ai vec_or(vector bool char __a,
6883 vector bool char __b) {
6884 return __a | __b;
6885}
6886
6887static __inline__ vector short __ATTRS_o_ai vec_or(vector short __a,
6888 vector short __b) {
6889 return __a | __b;
6890}
6891
6892static __inline__ vector short __ATTRS_o_ai vec_or(vector bool short __a,
6893 vector short __b) {
6894 return (vector short)__a | __b;
6895}
6896
6897static __inline__ vector short __ATTRS_o_ai vec_or(vector short __a,
6898 vector bool short __b) {
6899 return __a | (vector short)__b;
6900}
6901
6902static __inline__ vector unsigned short __ATTRS_o_ai
6903vec_or(vector unsigned short __a, vector unsigned short __b) {
6904 return __a | __b;
6905}
6906
6907static __inline__ vector unsigned short __ATTRS_o_ai
6908vec_or(vector bool short __a, vector unsigned short __b) {
6909 return (vector unsigned short)__a | __b;
6910}
6911
6912static __inline__ vector unsigned short __ATTRS_o_ai
6913vec_or(vector unsigned short __a, vector bool short __b) {
6914 return __a | (vector unsigned short)__b;
6915}
6916
6917static __inline__ vector bool short __ATTRS_o_ai vec_or(vector bool short __a,
6918 vector bool short __b) {
6919 return __a | __b;
6920}
6921
6922static __inline__ vector int __ATTRS_o_ai vec_or(vector int __a,
6923 vector int __b) {
6924 return __a | __b;
6925}
6926
6927static __inline__ vector int __ATTRS_o_ai vec_or(vector bool int __a,
6928 vector int __b) {
6929 return (vector int)__a | __b;
6930}
6931
6932static __inline__ vector int __ATTRS_o_ai vec_or(vector int __a,
6933 vector bool int __b) {
6934 return __a | (vector int)__b;
6935}
6936
6937static __inline__ vector unsigned int __ATTRS_o_ai
6938vec_or(vector unsigned int __a, vector unsigned int __b) {
6939 return __a | __b;
6940}
6941
6942static __inline__ vector unsigned int __ATTRS_o_ai
6943vec_or(vector bool int __a, vector unsigned int __b) {
6944 return (vector unsigned int)__a | __b;
6945}
6946
6947static __inline__ vector unsigned int __ATTRS_o_ai
6948vec_or(vector unsigned int __a, vector bool int __b) {
6949 return __a | (vector unsigned int)__b;
6950}
6951
6952static __inline__ vector bool int __ATTRS_o_ai vec_or(vector bool int __a,
6953 vector bool int __b) {
6954 return __a | __b;
6955}
6956
6957static __inline__ vector float __ATTRS_o_ai vec_or(vector float __a,
6958 vector float __b) {
6959 vector unsigned int __res =
6960 (vector unsigned int)__a | (vector unsigned int)__b;
6961 return (vector float)__res;
6962}
6963
6964static __inline__ vector float __ATTRS_o_ai vec_or(vector bool int __a,
6965 vector float __b) {
6966 vector unsigned int __res =
6967 (vector unsigned int)__a | (vector unsigned int)__b;
6968 return (vector float)__res;
6969}
6970
6971static __inline__ vector float __ATTRS_o_ai vec_or(vector float __a,
6972 vector bool int __b) {
6973 vector unsigned int __res =
6974 (vector unsigned int)__a | (vector unsigned int)__b;
6975 return (vector float)__res;
6976}
6977
6978#ifdef __VSX__
6979static __inline__ vector double __ATTRS_o_ai vec_or(vector bool long long __a,
6980 vector double __b) {
6981 return (vector double)((vector unsigned long long)__a |
6982 (vector unsigned long long)__b);
6983}
6984
6985static __inline__ vector double __ATTRS_o_ai vec_or(vector double __a,
6986 vector bool long long __b) {
6987 return (vector double)((vector unsigned long long)__a |
6988 (vector unsigned long long)__b);
6989}
6990
6991static __inline__ vector double __ATTRS_o_ai vec_or(vector double __a,
6992 vector double __b) {
6993 return (vector double)((vector unsigned long long)__a |
6994 (vector unsigned long long)__b);
6995}
6996
6997static __inline__ vector signed long long __ATTRS_o_ai
6998vec_or(vector signed long long __a, vector signed long long __b) {
6999 return __a | __b;
7000}
7001
7002static __inline__ vector signed long long __ATTRS_o_ai
7003vec_or(vector bool long long __a, vector signed long long __b) {
7004 return (vector signed long long)__a | __b;
7005}
7006
7007static __inline__ vector signed long long __ATTRS_o_ai
7008vec_or(vector signed long long __a, vector bool long long __b) {
7009 return __a | (vector signed long long)__b;
7010}
7011
7012static __inline__ vector unsigned long long __ATTRS_o_ai
7013vec_or(vector unsigned long long __a, vector unsigned long long __b) {
7014 return __a | __b;
7015}
7016
7017static __inline__ vector unsigned long long __ATTRS_o_ai
7018vec_or(vector bool long long __a, vector unsigned long long __b) {
7019 return (vector unsigned long long)__a | __b;
7020}
7021
7022static __inline__ vector unsigned long long __ATTRS_o_ai
7023vec_or(vector unsigned long long __a, vector bool long long __b) {
7024 return __a | (vector unsigned long long)__b;
7025}
7026
7027static __inline__ vector bool long long __ATTRS_o_ai
7028vec_or(vector bool long long __a, vector bool long long __b) {
7029 return __a | __b;
7030}
7031#endif
7032
7033#ifdef __POWER8_VECTOR__
7034static __inline__ vector signed char __ATTRS_o_ai
7035vec_orc(vector signed char __a, vector signed char __b) {
7036 return __a | ~__b;
7037}
7038
7039static __inline__ vector signed char __ATTRS_o_ai
7040vec_orc(vector signed char __a, vector bool char __b) {
7041 return __a | (vector signed char)~__b;
7042}
7043
7044static __inline__ vector signed char __ATTRS_o_ai
7045vec_orc(vector bool char __a, vector signed char __b) {
7046 return (vector signed char)(__a | (vector bool char)~__b);
7047}
7048
7049static __inline__ vector unsigned char __ATTRS_o_ai
7050vec_orc(vector unsigned char __a, vector unsigned char __b) {
7051 return __a | ~__b;
7052}
7053
7054static __inline__ vector unsigned char __ATTRS_o_ai
7055vec_orc(vector unsigned char __a, vector bool char __b) {
7056 return __a | (vector unsigned char)~__b;
7057}
7058
7059static __inline__ vector unsigned char __ATTRS_o_ai
7060vec_orc(vector bool char __a, vector unsigned char __b) {
7061 return (vector unsigned char)(__a | (vector bool char)~__b);
7062}
7063
7064static __inline__ vector bool char __ATTRS_o_ai vec_orc(vector bool char __a,
7065 vector bool char __b) {
7066 return __a | ~__b;
7067}
7068
7069static __inline__ vector signed short __ATTRS_o_ai
7070vec_orc(vector signed short __a, vector signed short __b) {
7071 return __a | ~__b;
7072}
7073
7074static __inline__ vector signed short __ATTRS_o_ai
7075vec_orc(vector signed short __a, vector bool short __b) {
7076 return __a | (vector signed short)~__b;
7077}
7078
7079static __inline__ vector signed short __ATTRS_o_ai
7080vec_orc(vector bool short __a, vector signed short __b) {
7081 return (vector signed short)(__a | (vector bool short)~__b);
7082}
7083
7084static __inline__ vector unsigned short __ATTRS_o_ai
7085vec_orc(vector unsigned short __a, vector unsigned short __b) {
7086 return __a | ~__b;
7087}
7088
7089static __inline__ vector unsigned short __ATTRS_o_ai
7090vec_orc(vector unsigned short __a, vector bool short __b) {
7091 return __a | (vector unsigned short)~__b;
7092}
7093
7094static __inline__ vector unsigned short __ATTRS_o_ai
7095vec_orc(vector bool short __a, vector unsigned short __b) {
7096 return (vector unsigned short)(__a | (vector bool short)~__b);
7097}
7098
7099static __inline__ vector bool short __ATTRS_o_ai
7100vec_orc(vector bool short __a, vector bool short __b) {
7101 return __a | ~__b;
7102}
7103
7104static __inline__ vector signed int __ATTRS_o_ai
7105vec_orc(vector signed int __a, vector signed int __b) {
7106 return __a | ~__b;
7107}
7108
7109static __inline__ vector signed int __ATTRS_o_ai vec_orc(vector signed int __a,
7110 vector bool int __b) {
7111 return __a | (vector signed int)~__b;
7112}
7113
7114static __inline__ vector signed int __ATTRS_o_ai
7115vec_orc(vector bool int __a, vector signed int __b) {
7116 return (vector signed int)(__a | (vector bool int)~__b);
7117}
7118
7119static __inline__ vector unsigned int __ATTRS_o_ai
7120vec_orc(vector unsigned int __a, vector unsigned int __b) {
7121 return __a | ~__b;
7122}
7123
7124static __inline__ vector unsigned int __ATTRS_o_ai
7125vec_orc(vector unsigned int __a, vector bool int __b) {
7126 return __a | (vector unsigned int)~__b;
7127}
7128
7129static __inline__ vector unsigned int __ATTRS_o_ai
7130vec_orc(vector bool int __a, vector unsigned int __b) {
7131 return (vector unsigned int)(__a | (vector bool int)~__b);
7132}
7133
7134static __inline__ vector bool int __ATTRS_o_ai vec_orc(vector bool int __a,
7135 vector bool int __b) {
7136 return __a | ~__b;
7137}
7138
7139static __inline__ vector float __ATTRS_o_ai
7140vec_orc(vector bool int __a, vector float __b) {
7141 return (vector float)(__a | ~(vector bool int)__b);
7142}
7143
7144static __inline__ vector float __ATTRS_o_ai
7145vec_orc(vector float __a, vector bool int __b) {
7146 return (vector float)((vector bool int)__a | ~__b);
7147}
7148
7149static __inline__ vector float __ATTRS_o_ai vec_orc(vector float __a,
7150 vector float __b) {
7151 return (vector float)((vector unsigned int)__a | ~(vector unsigned int)__b);
7152}
7153
7154static __inline__ vector signed long long __ATTRS_o_ai
7155vec_orc(vector signed long long __a, vector signed long long __b) {
7156 return __a | ~__b;
7157}
7158
7159static __inline__ vector signed long long __ATTRS_o_ai
7160vec_orc(vector signed long long __a, vector bool long long __b) {
7161 return __a | (vector signed long long)~__b;
7162}
7163
7164static __inline__ vector signed long long __ATTRS_o_ai
7165vec_orc(vector bool long long __a, vector signed long long __b) {
7166 return (vector signed long long)(__a | (vector bool long long)~__b);
7167}
7168
7169static __inline__ vector unsigned long long __ATTRS_o_ai
7170vec_orc(vector unsigned long long __a, vector unsigned long long __b) {
7171 return __a | ~__b;
7172}
7173
7174static __inline__ vector unsigned long long __ATTRS_o_ai
7175vec_orc(vector unsigned long long __a, vector bool long long __b) {
7176 return __a | (vector unsigned long long)~__b;
7177}
7178
7179static __inline__ vector unsigned long long __ATTRS_o_ai
7180vec_orc(vector bool long long __a, vector unsigned long long __b) {
7181 return (vector unsigned long long)(__a | (vector bool long long)~__b);
7182}
7183
7184static __inline__ vector bool long long __ATTRS_o_ai
7185vec_orc(vector bool long long __a, vector bool long long __b) {
7186 return __a | ~__b;
7187}
7188
7189static __inline__ vector double __ATTRS_o_ai
7190vec_orc(vector double __a, vector bool long long __b) {
7191 return (vector double)((vector bool long long)__a | ~__b);
7192}
7193
7194static __inline__ vector double __ATTRS_o_ai
7195vec_orc(vector bool long long __a, vector double __b) {
7196 return (vector double)(__a | ~(vector bool long long)__b);
7197}
7198
7199static __inline__ vector double __ATTRS_o_ai vec_orc(vector double __a,
7200 vector double __b) {
7201 return (vector double)((vector unsigned long long)__a |
7202 ~(vector unsigned long long)__b);
7203}
7204#endif
7205
7206/* vec_vor */
7207
7208static __inline__ vector signed char __ATTRS_o_ai
7209vec_vor(vector signed char __a, vector signed char __b) {
7210 return __a | __b;
7211}
7212
7213static __inline__ vector signed char __ATTRS_o_ai
7214vec_vor(vector bool char __a, vector signed char __b) {
7215 return (vector signed char)__a | __b;
7216}
7217
7218static __inline__ vector signed char __ATTRS_o_ai
7219vec_vor(vector signed char __a, vector bool char __b) {
7220 return __a | (vector signed char)__b;
7221}
7222
7223static __inline__ vector unsigned char __ATTRS_o_ai
7224vec_vor(vector unsigned char __a, vector unsigned char __b) {
7225 return __a | __b;
7226}
7227
7228static __inline__ vector unsigned char __ATTRS_o_ai
7229vec_vor(vector bool char __a, vector unsigned char __b) {
7230 return (vector unsigned char)__a | __b;
7231}
7232
7233static __inline__ vector unsigned char __ATTRS_o_ai
7234vec_vor(vector unsigned char __a, vector bool char __b) {
7235 return __a | (vector unsigned char)__b;
7236}
7237
7238static __inline__ vector bool char __ATTRS_o_ai vec_vor(vector bool char __a,
7239 vector bool char __b) {
7240 return __a | __b;
7241}
7242
7243static __inline__ vector short __ATTRS_o_ai vec_vor(vector short __a,
7244 vector short __b) {
7245 return __a | __b;
7246}
7247
7248static __inline__ vector short __ATTRS_o_ai vec_vor(vector bool short __a,
7249 vector short __b) {
7250 return (vector short)__a | __b;
7251}
7252
7253static __inline__ vector short __ATTRS_o_ai vec_vor(vector short __a,
7254 vector bool short __b) {
7255 return __a | (vector short)__b;
7256}
7257
7258static __inline__ vector unsigned short __ATTRS_o_ai
7259vec_vor(vector unsigned short __a, vector unsigned short __b) {
7260 return __a | __b;
7261}
7262
7263static __inline__ vector unsigned short __ATTRS_o_ai
7264vec_vor(vector bool short __a, vector unsigned short __b) {
7265 return (vector unsigned short)__a | __b;
7266}
7267
7268static __inline__ vector unsigned short __ATTRS_o_ai
7269vec_vor(vector unsigned short __a, vector bool short __b) {
7270 return __a | (vector unsigned short)__b;
7271}
7272
7273static __inline__ vector bool short __ATTRS_o_ai
7274vec_vor(vector bool short __a, vector bool short __b) {
7275 return __a | __b;
7276}
7277
7278static __inline__ vector int __ATTRS_o_ai vec_vor(vector int __a,
7279 vector int __b) {
7280 return __a | __b;
7281}
7282
7283static __inline__ vector int __ATTRS_o_ai vec_vor(vector bool int __a,
7284 vector int __b) {
7285 return (vector int)__a | __b;
7286}
7287
7288static __inline__ vector int __ATTRS_o_ai vec_vor(vector int __a,
7289 vector bool int __b) {
7290 return __a | (vector int)__b;
7291}
7292
7293static __inline__ vector unsigned int __ATTRS_o_ai
7294vec_vor(vector unsigned int __a, vector unsigned int __b) {
7295 return __a | __b;
7296}
7297
7298static __inline__ vector unsigned int __ATTRS_o_ai
7299vec_vor(vector bool int __a, vector unsigned int __b) {
7300 return (vector unsigned int)__a | __b;
7301}
7302
7303static __inline__ vector unsigned int __ATTRS_o_ai
7304vec_vor(vector unsigned int __a, vector bool int __b) {
7305 return __a | (vector unsigned int)__b;
7306}
7307
7308static __inline__ vector bool int __ATTRS_o_ai vec_vor(vector bool int __a,
7309 vector bool int __b) {
7310 return __a | __b;
7311}
7312
7313static __inline__ vector float __ATTRS_o_ai vec_vor(vector float __a,
7314 vector float __b) {
7315 vector unsigned int __res =
7316 (vector unsigned int)__a | (vector unsigned int)__b;
7317 return (vector float)__res;
7318}
7319
7320static __inline__ vector float __ATTRS_o_ai vec_vor(vector bool int __a,
7321 vector float __b) {
7322 vector unsigned int __res =
7323 (vector unsigned int)__a | (vector unsigned int)__b;
7324 return (vector float)__res;
7325}
7326
7327static __inline__ vector float __ATTRS_o_ai vec_vor(vector float __a,
7328 vector bool int __b) {
7329 vector unsigned int __res =
7330 (vector unsigned int)__a | (vector unsigned int)__b;
7331 return (vector float)__res;
7332}
7333
7334#ifdef __VSX__
7335static __inline__ vector signed long long __ATTRS_o_ai
7336vec_vor(vector signed long long __a, vector signed long long __b) {
7337 return __a | __b;
7338}
7339
7340static __inline__ vector signed long long __ATTRS_o_ai
7341vec_vor(vector bool long long __a, vector signed long long __b) {
7342 return (vector signed long long)__a | __b;
7343}
7344
7345static __inline__ vector signed long long __ATTRS_o_ai
7346vec_vor(vector signed long long __a, vector bool long long __b) {
7347 return __a | (vector signed long long)__b;
7348}
7349
7350static __inline__ vector unsigned long long __ATTRS_o_ai
7351vec_vor(vector unsigned long long __a, vector unsigned long long __b) {
7352 return __a | __b;
7353}
7354
7355static __inline__ vector unsigned long long __ATTRS_o_ai
7356vec_vor(vector bool long long __a, vector unsigned long long __b) {
7357 return (vector unsigned long long)__a | __b;
7358}
7359
7360static __inline__ vector unsigned long long __ATTRS_o_ai
7361vec_vor(vector unsigned long long __a, vector bool long long __b) {
7362 return __a | (vector unsigned long long)__b;
7363}
7364
7365static __inline__ vector bool long long __ATTRS_o_ai
7366vec_vor(vector bool long long __a, vector bool long long __b) {
7367 return __a | __b;
7368}
7369#endif
7370
7371/* vec_pack */
7372
7373/* The various vector pack instructions have a big-endian bias, so for
7374 little endian we must handle reversed element numbering. */
7375
7376static __inline__ vector signed char __ATTRS_o_ai
7377vec_pack(vector signed short __a, vector signed short __b) {
7378#ifdef __LITTLE_ENDIAN__
7379 return (vector signed char)vec_perm(
7380 __a, __b,
7381 (vector unsigned char)(0x00, 0x02, 0x04, 0x06, 0x08, 0x0A, 0x0C, 0x0E,
7382 0x10, 0x12, 0x14, 0x16, 0x18, 0x1A, 0x1C, 0x1E));
7383#else
7384 return (vector signed char)vec_perm(
7385 __a, __b,
7386 (vector unsigned char)(0x01, 0x03, 0x05, 0x07, 0x09, 0x0B, 0x0D, 0x0F,
7387 0x11, 0x13, 0x15, 0x17, 0x19, 0x1B, 0x1D, 0x1F));
7388#endif
7389}
7390
7391static __inline__ vector unsigned char __ATTRS_o_ai
7392vec_pack(vector unsigned short __a, vector unsigned short __b) {
7393#ifdef __LITTLE_ENDIAN__
7394 return (vector unsigned char)vec_perm(
7395 __a, __b,
7396 (vector unsigned char)(0x00, 0x02, 0x04, 0x06, 0x08, 0x0A, 0x0C, 0x0E,
7397 0x10, 0x12, 0x14, 0x16, 0x18, 0x1A, 0x1C, 0x1E));
7398#else
7399 return (vector unsigned char)vec_perm(
7400 __a, __b,
7401 (vector unsigned char)(0x01, 0x03, 0x05, 0x07, 0x09, 0x0B, 0x0D, 0x0F,
7402 0x11, 0x13, 0x15, 0x17, 0x19, 0x1B, 0x1D, 0x1F));
7403#endif
7404}
7405
7406static __inline__ vector bool char __ATTRS_o_ai
7407vec_pack(vector bool short __a, vector bool short __b) {
7408#ifdef __LITTLE_ENDIAN__
7409 return (vector bool char)vec_perm(
7410 __a, __b,
7411 (vector unsigned char)(0x00, 0x02, 0x04, 0x06, 0x08, 0x0A, 0x0C, 0x0E,
7412 0x10, 0x12, 0x14, 0x16, 0x18, 0x1A, 0x1C, 0x1E));
7413#else
7414 return (vector bool char)vec_perm(
7415 __a, __b,
7416 (vector unsigned char)(0x01, 0x03, 0x05, 0x07, 0x09, 0x0B, 0x0D, 0x0F,
7417 0x11, 0x13, 0x15, 0x17, 0x19, 0x1B, 0x1D, 0x1F));
7418#endif
7419}
7420
7421static __inline__ vector short __ATTRS_o_ai vec_pack(vector int __a,
7422 vector int __b) {
7423#ifdef __LITTLE_ENDIAN__
7424 return (vector short)vec_perm(
7425 __a, __b,
7426 (vector unsigned char)(0x00, 0x01, 0x04, 0x05, 0x08, 0x09, 0x0C, 0x0D,
7427 0x10, 0x11, 0x14, 0x15, 0x18, 0x19, 0x1C, 0x1D));
7428#else
7429 return (vector short)vec_perm(
7430 __a, __b,
7431 (vector unsigned char)(0x02, 0x03, 0x06, 0x07, 0x0A, 0x0B, 0x0E, 0x0F,
7432 0x12, 0x13, 0x16, 0x17, 0x1A, 0x1B, 0x1E, 0x1F));
7433#endif
7434}
7435
7436static __inline__ vector unsigned short __ATTRS_o_ai
7437vec_pack(vector unsigned int __a, vector unsigned int __b) {
7438#ifdef __LITTLE_ENDIAN__
7439 return (vector unsigned short)vec_perm(
7440 __a, __b,
7441 (vector unsigned char)(0x00, 0x01, 0x04, 0x05, 0x08, 0x09, 0x0C, 0x0D,
7442 0x10, 0x11, 0x14, 0x15, 0x18, 0x19, 0x1C, 0x1D));
7443#else
7444 return (vector unsigned short)vec_perm(
7445 __a, __b,
7446 (vector unsigned char)(0x02, 0x03, 0x06, 0x07, 0x0A, 0x0B, 0x0E, 0x0F,
7447 0x12, 0x13, 0x16, 0x17, 0x1A, 0x1B, 0x1E, 0x1F));
7448#endif
7449}
7450
7451static __inline__ vector bool short __ATTRS_o_ai vec_pack(vector bool int __a,
7452 vector bool int __b) {
7453#ifdef __LITTLE_ENDIAN__
7454 return (vector bool short)vec_perm(
7455 __a, __b,
7456 (vector unsigned char)(0x00, 0x01, 0x04, 0x05, 0x08, 0x09, 0x0C, 0x0D,
7457 0x10, 0x11, 0x14, 0x15, 0x18, 0x19, 0x1C, 0x1D));
7458#else
7459 return (vector bool short)vec_perm(
7460 __a, __b,
7461 (vector unsigned char)(0x02, 0x03, 0x06, 0x07, 0x0A, 0x0B, 0x0E, 0x0F,
7462 0x12, 0x13, 0x16, 0x17, 0x1A, 0x1B, 0x1E, 0x1F));
7463#endif
7464}
7465
7466#ifdef __VSX__
7467static __inline__ vector signed int __ATTRS_o_ai
7468vec_pack(vector signed long long __a, vector signed long long __b) {
7469#ifdef __LITTLE_ENDIAN__
7470 return (vector signed int)vec_perm(
7471 __a, __b,
7472 (vector unsigned char)(0x00, 0x01, 0x02, 0x03, 0x08, 0x09, 0x0A, 0x0B,
7473 0x10, 0x11, 0x12, 0x13, 0x18, 0x19, 0x1A, 0x1B));
7474#else
7475 return (vector signed int)vec_perm(
7476 __a, __b,
7477 (vector unsigned char)(0x04, 0x05, 0x06, 0x07, 0x0C, 0x0D, 0x0E, 0x0F,
7478 0x14, 0x15, 0x16, 0x17, 0x1C, 0x1D, 0x1E, 0x1F));
7479#endif
7480}
7481static __inline__ vector unsigned int __ATTRS_o_ai
7482vec_pack(vector unsigned long long __a, vector unsigned long long __b) {
7483#ifdef __LITTLE_ENDIAN__
7484 return (vector unsigned int)vec_perm(
7485 __a, __b,
7486 (vector unsigned char)(0x00, 0x01, 0x02, 0x03, 0x08, 0x09, 0x0A, 0x0B,
7487 0x10, 0x11, 0x12, 0x13, 0x18, 0x19, 0x1A, 0x1B));
7488#else
7489 return (vector unsigned int)vec_perm(
7490 __a, __b,
7491 (vector unsigned char)(0x04, 0x05, 0x06, 0x07, 0x0C, 0x0D, 0x0E, 0x0F,
7492 0x14, 0x15, 0x16, 0x17, 0x1C, 0x1D, 0x1E, 0x1F));
7493#endif
7494}
7495
7496static __inline__ vector bool int __ATTRS_o_ai
7497vec_pack(vector bool long long __a, vector bool long long __b) {
7498#ifdef __LITTLE_ENDIAN__
7499 return (vector bool int)vec_perm(
7500 __a, __b,
7501 (vector unsigned char)(0x00, 0x01, 0x02, 0x03, 0x08, 0x09, 0x0A, 0x0B,
7502 0x10, 0x11, 0x12, 0x13, 0x18, 0x19, 0x1A, 0x1B));
7503#else
7504 return (vector bool int)vec_perm(
7505 __a, __b,
7506 (vector unsigned char)(0x04, 0x05, 0x06, 0x07, 0x0C, 0x0D, 0x0E, 0x0F,
7507 0x14, 0x15, 0x16, 0x17, 0x1C, 0x1D, 0x1E, 0x1F));
7508#endif
7509}
7510
7511static __inline__ vector float __ATTRS_o_ai
7512vec_pack(vector double __a, vector double __b) {
7513 return (vector float) (__a[0], __a[1], __b[0], __b[1]);
7514}
7515#endif
7516
7517#ifdef __POWER9_VECTOR__
7518static __inline__ vector unsigned short __ATTRS_o_ai
7519vec_pack_to_short_fp32(vector float __a, vector float __b) {
7520 vector float __resa = __builtin_vsx_xvcvsphp(__a);
7521 vector float __resb = __builtin_vsx_xvcvsphp(__b);
7522#ifdef __LITTLE_ENDIAN__
7523 return (vector unsigned short)vec_mergee(__resa, __resb);
7524#else
7525 return (vector unsigned short)vec_mergeo(__resa, __resb);
7526#endif
7527}
7528
7529#endif
7530/* vec_vpkuhum */
7531
7532#define __builtin_altivec_vpkuhum vec_vpkuhum
7533
7534static __inline__ vector signed char __ATTRS_o_ai
7535vec_vpkuhum(vector signed short __a, vector signed short __b) {
7536#ifdef __LITTLE_ENDIAN__
7537 return (vector signed char)vec_perm(
7538 __a, __b,
7539 (vector unsigned char)(0x00, 0x02, 0x04, 0x06, 0x08, 0x0A, 0x0C, 0x0E,
7540 0x10, 0x12, 0x14, 0x16, 0x18, 0x1A, 0x1C, 0x1E));
7541#else
7542 return (vector signed char)vec_perm(
7543 __a, __b,
7544 (vector unsigned char)(0x01, 0x03, 0x05, 0x07, 0x09, 0x0B, 0x0D, 0x0F,
7545 0x11, 0x13, 0x15, 0x17, 0x19, 0x1B, 0x1D, 0x1F));
7546#endif
7547}
7548
7549static __inline__ vector unsigned char __ATTRS_o_ai
7550vec_vpkuhum(vector unsigned short __a, vector unsigned short __b) {
7551#ifdef __LITTLE_ENDIAN__
7552 return (vector unsigned char)vec_perm(
7553 __a, __b,
7554 (vector unsigned char)(0x00, 0x02, 0x04, 0x06, 0x08, 0x0A, 0x0C, 0x0E,
7555 0x10, 0x12, 0x14, 0x16, 0x18, 0x1A, 0x1C, 0x1E));
7556#else
7557 return (vector unsigned char)vec_perm(
7558 __a, __b,
7559 (vector unsigned char)(0x01, 0x03, 0x05, 0x07, 0x09, 0x0B, 0x0D, 0x0F,
7560 0x11, 0x13, 0x15, 0x17, 0x19, 0x1B, 0x1D, 0x1F));
7561#endif
7562}
7563
7564static __inline__ vector bool char __ATTRS_o_ai
7565vec_vpkuhum(vector bool short __a, vector bool short __b) {
7566#ifdef __LITTLE_ENDIAN__
7567 return (vector bool char)vec_perm(
7568 __a, __b,
7569 (vector unsigned char)(0x00, 0x02, 0x04, 0x06, 0x08, 0x0A, 0x0C, 0x0E,
7570 0x10, 0x12, 0x14, 0x16, 0x18, 0x1A, 0x1C, 0x1E));
7571#else
7572 return (vector bool char)vec_perm(
7573 __a, __b,
7574 (vector unsigned char)(0x01, 0x03, 0x05, 0x07, 0x09, 0x0B, 0x0D, 0x0F,
7575 0x11, 0x13, 0x15, 0x17, 0x19, 0x1B, 0x1D, 0x1F));
7576#endif
7577}
7578
7579/* vec_vpkuwum */
7580
7581#define __builtin_altivec_vpkuwum vec_vpkuwum
7582
7583static __inline__ vector short __ATTRS_o_ai vec_vpkuwum(vector int __a,
7584 vector int __b) {
7585#ifdef __LITTLE_ENDIAN__
7586 return (vector short)vec_perm(
7587 __a, __b,
7588 (vector unsigned char)(0x00, 0x01, 0x04, 0x05, 0x08, 0x09, 0x0C, 0x0D,
7589 0x10, 0x11, 0x14, 0x15, 0x18, 0x19, 0x1C, 0x1D));
7590#else
7591 return (vector short)vec_perm(
7592 __a, __b,
7593 (vector unsigned char)(0x02, 0x03, 0x06, 0x07, 0x0A, 0x0B, 0x0E, 0x0F,
7594 0x12, 0x13, 0x16, 0x17, 0x1A, 0x1B, 0x1E, 0x1F));
7595#endif
7596}
7597
7598static __inline__ vector unsigned short __ATTRS_o_ai
7599vec_vpkuwum(vector unsigned int __a, vector unsigned int __b) {
7600#ifdef __LITTLE_ENDIAN__
7601 return (vector unsigned short)vec_perm(
7602 __a, __b,
7603 (vector unsigned char)(0x00, 0x01, 0x04, 0x05, 0x08, 0x09, 0x0C, 0x0D,
7604 0x10, 0x11, 0x14, 0x15, 0x18, 0x19, 0x1C, 0x1D));
7605#else
7606 return (vector unsigned short)vec_perm(
7607 __a, __b,
7608 (vector unsigned char)(0x02, 0x03, 0x06, 0x07, 0x0A, 0x0B, 0x0E, 0x0F,
7609 0x12, 0x13, 0x16, 0x17, 0x1A, 0x1B, 0x1E, 0x1F));
7610#endif
7611}
7612
7613static __inline__ vector bool short __ATTRS_o_ai
7614vec_vpkuwum(vector bool int __a, vector bool int __b) {
7615#ifdef __LITTLE_ENDIAN__
7616 return (vector bool short)vec_perm(
7617 __a, __b,
7618 (vector unsigned char)(0x00, 0x01, 0x04, 0x05, 0x08, 0x09, 0x0C, 0x0D,
7619 0x10, 0x11, 0x14, 0x15, 0x18, 0x19, 0x1C, 0x1D));
7620#else
7621 return (vector bool short)vec_perm(
7622 __a, __b,
7623 (vector unsigned char)(0x02, 0x03, 0x06, 0x07, 0x0A, 0x0B, 0x0E, 0x0F,
7624 0x12, 0x13, 0x16, 0x17, 0x1A, 0x1B, 0x1E, 0x1F));
7625#endif
7626}
7627
7628/* vec_vpkudum */
7629
7630#ifdef __POWER8_VECTOR__
7631#define __builtin_altivec_vpkudum vec_vpkudum
7632
7633static __inline__ vector int __ATTRS_o_ai vec_vpkudum(vector long long __a,
7634 vector long long __b) {
7635#ifdef __LITTLE_ENDIAN__
7636 return (vector int)vec_perm(
7637 __a, __b,
7638 (vector unsigned char)(0x00, 0x01, 0x02, 0x03, 0x08, 0x09, 0x0A, 0x0B,
7639 0x10, 0x11, 0x12, 0x13, 0x18, 0x19, 0x1A, 0x1B));
7640#else
7641 return (vector int)vec_perm(
7642 __a, __b,
7643 (vector unsigned char)(0x04, 0x05, 0x06, 0x07, 0x0C, 0x0D, 0x0E, 0x0F,
7644 0x14, 0x15, 0x16, 0x17, 0x1C, 0x1D, 0x1E, 0x1F));
7645#endif
7646}
7647
7648static __inline__ vector unsigned int __ATTRS_o_ai
7649vec_vpkudum(vector unsigned long long __a, vector unsigned long long __b) {
7650#ifdef __LITTLE_ENDIAN__
7651 return (vector unsigned int)vec_perm(
7652 __a, __b,
7653 (vector unsigned char)(0x00, 0x01, 0x02, 0x03, 0x08, 0x09, 0x0A, 0x0B,
7654 0x10, 0x11, 0x12, 0x13, 0x18, 0x19, 0x1A, 0x1B));
7655#else
7656 return (vector unsigned int)vec_perm(
7657 __a, __b,
7658 (vector unsigned char)(0x04, 0x05, 0x06, 0x07, 0x0C, 0x0D, 0x0E, 0x0F,
7659 0x14, 0x15, 0x16, 0x17, 0x1C, 0x1D, 0x1E, 0x1F));
7660#endif
7661}
7662
7663static __inline__ vector bool int __ATTRS_o_ai
7664vec_vpkudum(vector bool long long __a, vector bool long long __b) {
7665#ifdef __LITTLE_ENDIAN__
7666 return (vector bool int)vec_perm(
7667 (vector long long)__a, (vector long long)__b,
7668 (vector unsigned char)(0x00, 0x01, 0x02, 0x03, 0x08, 0x09, 0x0A, 0x0B,
7669 0x10, 0x11, 0x12, 0x13, 0x18, 0x19, 0x1A, 0x1B));
7670#else
7671 return (vector bool int)vec_perm(
7672 (vector long long)__a, (vector long long)__b,
7673 (vector unsigned char)(0x04, 0x05, 0x06, 0x07, 0x0C, 0x0D, 0x0E, 0x0F,
7674 0x14, 0x15, 0x16, 0x17, 0x1C, 0x1D, 0x1E, 0x1F));
7675#endif
7676}
7677#endif
7678
7679/* vec_packpx */
7680
7681static __inline__ vector pixel __attribute__((__always_inline__))
7682vec_packpx(vector unsigned int __a, vector unsigned int __b) {
7683#ifdef __LITTLE_ENDIAN__
7684 return (vector pixel)__builtin_altivec_vpkpx(__b, __a);
7685#else
7686 return (vector pixel)__builtin_altivec_vpkpx(__a, __b);
7687#endif
7688}
7689
7690/* vec_vpkpx */
7691
7692static __inline__ vector pixel __attribute__((__always_inline__))
7693vec_vpkpx(vector unsigned int __a, vector unsigned int __b) {
7694#ifdef __LITTLE_ENDIAN__
7695 return (vector pixel)__builtin_altivec_vpkpx(__b, __a);
7696#else
7697 return (vector pixel)__builtin_altivec_vpkpx(__a, __b);
7698#endif
7699}
7700
7701/* vec_packs */
7702
7703static __inline__ vector signed char __ATTRS_o_ai vec_packs(vector short __a,
7704 vector short __b) {
7705#ifdef __LITTLE_ENDIAN__
7706 return __builtin_altivec_vpkshss(__b, __a);
7707#else
7708 return __builtin_altivec_vpkshss(__a, __b);
7709#endif
7710}
7711
7712static __inline__ vector unsigned char __ATTRS_o_ai
7713vec_packs(vector unsigned short __a, vector unsigned short __b) {
7714#ifdef __LITTLE_ENDIAN__
7715 return __builtin_altivec_vpkuhus(__b, __a);
7716#else
7717 return __builtin_altivec_vpkuhus(__a, __b);
7718#endif
7719}
7720
7721static __inline__ vector signed short __ATTRS_o_ai vec_packs(vector int __a,
7722 vector int __b) {
7723#ifdef __LITTLE_ENDIAN__
7724 return __builtin_altivec_vpkswss(__b, __a);
7725#else
7726 return __builtin_altivec_vpkswss(__a, __b);
7727#endif
7728}
7729
7730static __inline__ vector unsigned short __ATTRS_o_ai
7731vec_packs(vector unsigned int __a, vector unsigned int __b) {
7732#ifdef __LITTLE_ENDIAN__
7733 return __builtin_altivec_vpkuwus(__b, __a);
7734#else
7735 return __builtin_altivec_vpkuwus(__a, __b);
7736#endif
7737}
7738
7739#ifdef __POWER8_VECTOR__
7740static __inline__ vector int __ATTRS_o_ai vec_packs(vector long long __a,
7741 vector long long __b) {
7742#ifdef __LITTLE_ENDIAN__
7743 return __builtin_altivec_vpksdss(__b, __a);
7744#else
7745 return __builtin_altivec_vpksdss(__a, __b);
7746#endif
7747}
7748
7749static __inline__ vector unsigned int __ATTRS_o_ai
7750vec_packs(vector unsigned long long __a, vector unsigned long long __b) {
7751#ifdef __LITTLE_ENDIAN__
7752 return __builtin_altivec_vpkudus(__b, __a);
7753#else
7754 return __builtin_altivec_vpkudus(__a, __b);
7755#endif
7756}
7757#endif
7758
7759/* vec_vpkshss */
7760
7761static __inline__ vector signed char __attribute__((__always_inline__))
7762vec_vpkshss(vector short __a, vector short __b) {
7763#ifdef __LITTLE_ENDIAN__
7764 return __builtin_altivec_vpkshss(__b, __a);
7765#else
7766 return __builtin_altivec_vpkshss(__a, __b);
7767#endif
7768}
7769
7770/* vec_vpksdss */
7771
7772#ifdef __POWER8_VECTOR__
7773static __inline__ vector int __ATTRS_o_ai vec_vpksdss(vector long long __a,
7774 vector long long __b) {
7775#ifdef __LITTLE_ENDIAN__
7776 return __builtin_altivec_vpksdss(__b, __a);
7777#else
7778 return __builtin_altivec_vpksdss(__a, __b);
7779#endif
7780}
7781#endif
7782
7783/* vec_vpkuhus */
7784
7785static __inline__ vector unsigned char __attribute__((__always_inline__))
7786vec_vpkuhus(vector unsigned short __a, vector unsigned short __b) {
7787#ifdef __LITTLE_ENDIAN__
7788 return __builtin_altivec_vpkuhus(__b, __a);
7789#else
7790 return __builtin_altivec_vpkuhus(__a, __b);
7791#endif
7792}
7793
7794/* vec_vpkudus */
7795
7796#ifdef __POWER8_VECTOR__
7797static __inline__ vector unsigned int __attribute__((__always_inline__))
7798vec_vpkudus(vector unsigned long long __a, vector unsigned long long __b) {
7799#ifdef __LITTLE_ENDIAN__
7800 return __builtin_altivec_vpkudus(__b, __a);
7801#else
7802 return __builtin_altivec_vpkudus(__a, __b);
7803#endif
7804}
7805#endif
7806
7807/* vec_vpkswss */
7808
7809static __inline__ vector signed short __attribute__((__always_inline__))
7810vec_vpkswss(vector int __a, vector int __b) {
7811#ifdef __LITTLE_ENDIAN__
7812 return __builtin_altivec_vpkswss(__b, __a);
7813#else
7814 return __builtin_altivec_vpkswss(__a, __b);
7815#endif
7816}
7817
7818/* vec_vpkuwus */
7819
7820static __inline__ vector unsigned short __attribute__((__always_inline__))
7821vec_vpkuwus(vector unsigned int __a, vector unsigned int __b) {
7822#ifdef __LITTLE_ENDIAN__
7823 return __builtin_altivec_vpkuwus(__b, __a);
7824#else
7825 return __builtin_altivec_vpkuwus(__a, __b);
7826#endif
7827}
7828
7829/* vec_packsu */
7830
7831static __inline__ vector unsigned char __ATTRS_o_ai
7832vec_packsu(vector short __a, vector short __b) {
7833#ifdef __LITTLE_ENDIAN__
7834 return __builtin_altivec_vpkshus(__b, __a);
7835#else
7836 return __builtin_altivec_vpkshus(__a, __b);
7837#endif
7838}
7839
7840static __inline__ vector unsigned char __ATTRS_o_ai
7841vec_packsu(vector unsigned short __a, vector unsigned short __b) {
7842#ifdef __LITTLE_ENDIAN__
7843 return __builtin_altivec_vpkuhus(__b, __a);
7844#else
7845 return __builtin_altivec_vpkuhus(__a, __b);
7846#endif
7847}
7848
7849static __inline__ vector unsigned short __ATTRS_o_ai
7850vec_packsu(vector int __a, vector int __b) {
7851#ifdef __LITTLE_ENDIAN__
7852 return __builtin_altivec_vpkswus(__b, __a);
7853#else
7854 return __builtin_altivec_vpkswus(__a, __b);
7855#endif
7856}
7857
7858static __inline__ vector unsigned short __ATTRS_o_ai
7859vec_packsu(vector unsigned int __a, vector unsigned int __b) {
7860#ifdef __LITTLE_ENDIAN__
7861 return __builtin_altivec_vpkuwus(__b, __a);
7862#else
7863 return __builtin_altivec_vpkuwus(__a, __b);
7864#endif
7865}
7866
7867#ifdef __POWER8_VECTOR__
7868static __inline__ vector unsigned int __ATTRS_o_ai
7869vec_packsu(vector long long __a, vector long long __b) {
7870#ifdef __LITTLE_ENDIAN__
7871 return __builtin_altivec_vpksdus(__b, __a);
7872#else
7873 return __builtin_altivec_vpksdus(__a, __b);
7874#endif
7875}
7876
7877static __inline__ vector unsigned int __ATTRS_o_ai
7878vec_packsu(vector unsigned long long __a, vector unsigned long long __b) {
7879#ifdef __LITTLE_ENDIAN__
7880 return __builtin_altivec_vpkudus(__b, __a);
7881#else
7882 return __builtin_altivec_vpkudus(__a, __b);
7883#endif
7884}
7885#endif
7886
7887/* vec_vpkshus */
7888
7889static __inline__ vector unsigned char __ATTRS_o_ai
7890vec_vpkshus(vector short __a, vector short __b) {
7891#ifdef __LITTLE_ENDIAN__
7892 return __builtin_altivec_vpkshus(__b, __a);
7893#else
7894 return __builtin_altivec_vpkshus(__a, __b);
7895#endif
7896}
7897
7898static __inline__ vector unsigned char __ATTRS_o_ai
7899vec_vpkshus(vector unsigned short __a, vector unsigned short __b) {
7900#ifdef __LITTLE_ENDIAN__
7901 return __builtin_altivec_vpkuhus(__b, __a);
7902#else
7903 return __builtin_altivec_vpkuhus(__a, __b);
7904#endif
7905}
7906
7907/* vec_vpkswus */
7908
7909static __inline__ vector unsigned short __ATTRS_o_ai
7910vec_vpkswus(vector int __a, vector int __b) {
7911#ifdef __LITTLE_ENDIAN__
7912 return __builtin_altivec_vpkswus(__b, __a);
7913#else
7914 return __builtin_altivec_vpkswus(__a, __b);
7915#endif
7916}
7917
7918static __inline__ vector unsigned short __ATTRS_o_ai
7919vec_vpkswus(vector unsigned int __a, vector unsigned int __b) {
7920#ifdef __LITTLE_ENDIAN__
7921 return __builtin_altivec_vpkuwus(__b, __a);
7922#else
7923 return __builtin_altivec_vpkuwus(__a, __b);
7924#endif
7925}
7926
7927/* vec_vpksdus */
7928
7929#ifdef __POWER8_VECTOR__
7930static __inline__ vector unsigned int __ATTRS_o_ai
7931vec_vpksdus(vector long long __a, vector long long __b) {
7932#ifdef __LITTLE_ENDIAN__
7933 return __builtin_altivec_vpksdus(__b, __a);
7934#else
7935 return __builtin_altivec_vpksdus(__a, __b);
7936#endif
7937}
7938#endif
7939
7940/* vec_perm */
7941
7942// The vperm instruction is defined architecturally with a big-endian bias.
7943// For little endian, we swap the input operands and invert the permute
7944// control vector. Only the rightmost 5 bits matter, so we could use
7945// a vector of all 31s instead of all 255s to perform the inversion.
7946// However, when the PCV is not a constant, using 255 has an advantage
7947// in that the vec_xor can be recognized as a vec_nor (and for P8 and
7948// later, possibly a vec_nand).
7949
7950static __inline__ vector signed char __ATTRS_o_ai vec_perm(
7951 vector signed char __a, vector signed char __b, vector unsigned char __c) {
7952#ifdef __LITTLE_ENDIAN__
7953 vector unsigned char __d = {255, 255, 255, 255, 255, 255, 255, 255,
7954 255, 255, 255, 255, 255, 255, 255, 255};
7955 __d = vec_xor(__c, __d);
7956 return (vector signed char)__builtin_altivec_vperm_4si((vector int)__b,
7957 (vector int)__a, __d);
7958#else
7959 return (vector signed char)__builtin_altivec_vperm_4si((vector int)__a,
7960 (vector int)__b, __c);
7961#endif
7962}
7963
7964static __inline__ vector unsigned char __ATTRS_o_ai
7965vec_perm(vector unsigned char __a, vector unsigned char __b,
7966 vector unsigned char __c) {
7967#ifdef __LITTLE_ENDIAN__
7968 vector unsigned char __d = {255, 255, 255, 255, 255, 255, 255, 255,
7969 255, 255, 255, 255, 255, 255, 255, 255};
7970 __d = vec_xor(__c, __d);
7971 return (vector unsigned char)__builtin_altivec_vperm_4si(
7972 (vector int)__b, (vector int)__a, __d);
7973#else
7974 return (vector unsigned char)__builtin_altivec_vperm_4si(
7975 (vector int)__a, (vector int)__b, __c);
7976#endif
7977}
7978
7979static __inline__ vector bool char __ATTRS_o_ai
7980vec_perm(vector bool char __a, vector bool char __b, vector unsigned char __c) {
7981#ifdef __LITTLE_ENDIAN__
7982 vector unsigned char __d = {255, 255, 255, 255, 255, 255, 255, 255,
7983 255, 255, 255, 255, 255, 255, 255, 255};
7984 __d = vec_xor(__c, __d);
7985 return (vector bool char)__builtin_altivec_vperm_4si((vector int)__b,
7986 (vector int)__a, __d);
7987#else
7988 return (vector bool char)__builtin_altivec_vperm_4si((vector int)__a,
7989 (vector int)__b, __c);
7990#endif
7991}
7992
7993static __inline__ vector short __ATTRS_o_ai vec_perm(vector signed short __a,
7994 vector signed short __b,
7995 vector unsigned char __c) {
7996#ifdef __LITTLE_ENDIAN__
7997 vector unsigned char __d = {255, 255, 255, 255, 255, 255, 255, 255,
7998 255, 255, 255, 255, 255, 255, 255, 255};
7999 __d = vec_xor(__c, __d);
8000 return (vector signed short)__builtin_altivec_vperm_4si((vector int)__b,
8001 (vector int)__a, __d);
8002#else
8003 return (vector signed short)__builtin_altivec_vperm_4si((vector int)__a,
8004 (vector int)__b, __c);
8005#endif
8006}
8007
8008static __inline__ vector unsigned short __ATTRS_o_ai
8009vec_perm(vector unsigned short __a, vector unsigned short __b,
8010 vector unsigned char __c) {
8011#ifdef __LITTLE_ENDIAN__
8012 vector unsigned char __d = {255, 255, 255, 255, 255, 255, 255, 255,
8013 255, 255, 255, 255, 255, 255, 255, 255};
8014 __d = vec_xor(__c, __d);
8015 return (vector unsigned short)__builtin_altivec_vperm_4si(
8016 (vector int)__b, (vector int)__a, __d);
8017#else
8018 return (vector unsigned short)__builtin_altivec_vperm_4si(
8019 (vector int)__a, (vector int)__b, __c);
8020#endif
8021}
8022
8023static __inline__ vector bool short __ATTRS_o_ai vec_perm(
8024 vector bool short __a, vector bool short __b, vector unsigned char __c) {
8025#ifdef __LITTLE_ENDIAN__
8026 vector unsigned char __d = {255, 255, 255, 255, 255, 255, 255, 255,
8027 255, 255, 255, 255, 255, 255, 255, 255};
8028 __d = vec_xor(__c, __d);
8029 return (vector bool short)__builtin_altivec_vperm_4si((vector int)__b,
8030 (vector int)__a, __d);
8031#else
8032 return (vector bool short)__builtin_altivec_vperm_4si((vector int)__a,
8033 (vector int)__b, __c);
8034#endif
8035}
8036
8037static __inline__ vector pixel __ATTRS_o_ai vec_perm(vector pixel __a,
8038 vector pixel __b,
8039 vector unsigned char __c) {
8040#ifdef __LITTLE_ENDIAN__
8041 vector unsigned char __d = {255, 255, 255, 255, 255, 255, 255, 255,
8042 255, 255, 255, 255, 255, 255, 255, 255};
8043 __d = vec_xor(__c, __d);
8044 return (vector pixel)__builtin_altivec_vperm_4si((vector int)__b,
8045 (vector int)__a, __d);
8046#else
8047 return (vector pixel)__builtin_altivec_vperm_4si((vector int)__a,
8048 (vector int)__b, __c);
8049#endif
8050}
8051
8052static __inline__ vector int __ATTRS_o_ai vec_perm(vector signed int __a,
8053 vector signed int __b,
8054 vector unsigned char __c) {
8055#ifdef __LITTLE_ENDIAN__
8056 vector unsigned char __d = {255, 255, 255, 255, 255, 255, 255, 255,
8057 255, 255, 255, 255, 255, 255, 255, 255};
8058 __d = vec_xor(__c, __d);
8059 return (vector signed int)__builtin_altivec_vperm_4si(__b, __a, __d);
8060#else
8061 return (vector signed int)__builtin_altivec_vperm_4si(__a, __b, __c);
8062#endif
8063}
8064
8065static __inline__ vector unsigned int __ATTRS_o_ai
8066vec_perm(vector unsigned int __a, vector unsigned int __b,
8067 vector unsigned char __c) {
8068#ifdef __LITTLE_ENDIAN__
8069 vector unsigned char __d = {255, 255, 255, 255, 255, 255, 255, 255,
8070 255, 255, 255, 255, 255, 255, 255, 255};
8071 __d = vec_xor(__c, __d);
8072 return (vector unsigned int)__builtin_altivec_vperm_4si((vector int)__b,
8073 (vector int)__a, __d);
8074#else
8075 return (vector unsigned int)__builtin_altivec_vperm_4si((vector int)__a,
8076 (vector int)__b, __c);
8077#endif
8078}
8079
8080static __inline__ vector bool int __ATTRS_o_ai
8081vec_perm(vector bool int __a, vector bool int __b, vector unsigned char __c) {
8082#ifdef __LITTLE_ENDIAN__
8083 vector unsigned char __d = {255, 255, 255, 255, 255, 255, 255, 255,
8084 255, 255, 255, 255, 255, 255, 255, 255};
8085 __d = vec_xor(__c, __d);
8086 return (vector bool int)__builtin_altivec_vperm_4si((vector int)__b,
8087 (vector int)__a, __d);
8088#else
8089 return (vector bool int)__builtin_altivec_vperm_4si((vector int)__a,
8090 (vector int)__b, __c);
8091#endif
8092}
8093
8094static __inline__ vector float __ATTRS_o_ai vec_perm(vector float __a,
8095 vector float __b,
8096 vector unsigned char __c) {
8097#ifdef __LITTLE_ENDIAN__
8098 vector unsigned char __d = {255, 255, 255, 255, 255, 255, 255, 255,
8099 255, 255, 255, 255, 255, 255, 255, 255};
8100 __d = vec_xor(__c, __d);
8101 return (vector float)__builtin_altivec_vperm_4si((vector int)__b,
8102 (vector int)__a, __d);
8103#else
8104 return (vector float)__builtin_altivec_vperm_4si((vector int)__a,
8105 (vector int)__b, __c);
8106#endif
8107}
8108
8109#ifdef __VSX__
8110static __inline__ vector long long __ATTRS_o_ai
8111vec_perm(vector signed long long __a, vector signed long long __b,
8112 vector unsigned char __c) {
8113#ifdef __LITTLE_ENDIAN__
8114 vector unsigned char __d = {255, 255, 255, 255, 255, 255, 255, 255,
8115 255, 255, 255, 255, 255, 255, 255, 255};
8116 __d = vec_xor(__c, __d);
8117 return (vector signed long long)__builtin_altivec_vperm_4si(
8118 (vector int)__b, (vector int)__a, __d);
8119#else
8120 return (vector signed long long)__builtin_altivec_vperm_4si(
8121 (vector int)__a, (vector int)__b, __c);
8122#endif
8123}
8124
8125static __inline__ vector unsigned long long __ATTRS_o_ai
8126vec_perm(vector unsigned long long __a, vector unsigned long long __b,
8127 vector unsigned char __c) {
8128#ifdef __LITTLE_ENDIAN__
8129 vector unsigned char __d = {255, 255, 255, 255, 255, 255, 255, 255,
8130 255, 255, 255, 255, 255, 255, 255, 255};
8131 __d = vec_xor(__c, __d);
8132 return (vector unsigned long long)__builtin_altivec_vperm_4si(
8133 (vector int)__b, (vector int)__a, __d);
8134#else
8135 return (vector unsigned long long)__builtin_altivec_vperm_4si(
8136 (vector int)__a, (vector int)__b, __c);
8137#endif
8138}
8139
8140static __inline__ vector bool long long __ATTRS_o_ai
8141vec_perm(vector bool long long __a, vector bool long long __b,
8142 vector unsigned char __c) {
8143#ifdef __LITTLE_ENDIAN__
8144 vector unsigned char __d = {255, 255, 255, 255, 255, 255, 255, 255,
8145 255, 255, 255, 255, 255, 255, 255, 255};
8146 __d = vec_xor(__c, __d);
8147 return (vector bool long long)__builtin_altivec_vperm_4si(
8148 (vector int)__b, (vector int)__a, __d);
8149#else
8150 return (vector bool long long)__builtin_altivec_vperm_4si(
8151 (vector int)__a, (vector int)__b, __c);
8152#endif
8153}
8154
8155static __inline__ vector double __ATTRS_o_ai
8156vec_perm(vector double __a, vector double __b, vector unsigned char __c) {
8157#ifdef __LITTLE_ENDIAN__
8158 vector unsigned char __d = {255, 255, 255, 255, 255, 255, 255, 255,
8159 255, 255, 255, 255, 255, 255, 255, 255};
8160 __d = vec_xor(__c, __d);
8161 return (vector double)__builtin_altivec_vperm_4si((vector int)__b,
8162 (vector int)__a, __d);
8163#else
8164 return (vector double)__builtin_altivec_vperm_4si((vector int)__a,
8165 (vector int)__b, __c);
8166#endif
8167}
8168#endif
8169
8170/* vec_vperm */
8171
8172static __inline__ vector signed char __ATTRS_o_ai vec_vperm(
8173 vector signed char __a, vector signed char __b, vector unsigned char __c) {
8174 return vec_perm(__a, __b, __c);
8175}
8176
8177static __inline__ vector unsigned char __ATTRS_o_ai
8178vec_vperm(vector unsigned char __a, vector unsigned char __b,
8179 vector unsigned char __c) {
8180 return vec_perm(__a, __b, __c);
8181}
8182
8183static __inline__ vector bool char __ATTRS_o_ai vec_vperm(
8184 vector bool char __a, vector bool char __b, vector unsigned char __c) {
8185 return vec_perm(__a, __b, __c);
8186}
8187
8188static __inline__ vector short __ATTRS_o_ai
8189vec_vperm(vector short __a, vector short __b, vector unsigned char __c) {
8190 return vec_perm(__a, __b, __c);
8191}
8192
8193static __inline__ vector unsigned short __ATTRS_o_ai
8194vec_vperm(vector unsigned short __a, vector unsigned short __b,
8195 vector unsigned char __c) {
8196 return vec_perm(__a, __b, __c);
8197}
8198
8199static __inline__ vector bool short __ATTRS_o_ai vec_vperm(
8200 vector bool short __a, vector bool short __b, vector unsigned char __c) {
8201 return vec_perm(__a, __b, __c);
8202}
8203
8204static __inline__ vector pixel __ATTRS_o_ai
8205vec_vperm(vector pixel __a, vector pixel __b, vector unsigned char __c) {
8206 return vec_perm(__a, __b, __c);
8207}
8208
8209static __inline__ vector int __ATTRS_o_ai vec_vperm(vector int __a,
8210 vector int __b,
8211 vector unsigned char __c) {
8212 return vec_perm(__a, __b, __c);
8213}
8214
8215static __inline__ vector unsigned int __ATTRS_o_ai
8216vec_vperm(vector unsigned int __a, vector unsigned int __b,
8217 vector unsigned char __c) {
8218 return vec_perm(__a, __b, __c);
8219}
8220
8221static __inline__ vector bool int __ATTRS_o_ai
8222vec_vperm(vector bool int __a, vector bool int __b, vector unsigned char __c) {
8223 return vec_perm(__a, __b, __c);
8224}
8225
8226static __inline__ vector float __ATTRS_o_ai
8227vec_vperm(vector float __a, vector float __b, vector unsigned char __c) {
8228 return vec_perm(__a, __b, __c);
8229}
8230
8231#ifdef __VSX__
8232static __inline__ vector long long __ATTRS_o_ai vec_vperm(
8233 vector long long __a, vector long long __b, vector unsigned char __c) {
8234 return vec_perm(__a, __b, __c);
8235}
8236
8237static __inline__ vector unsigned long long __ATTRS_o_ai
8238vec_vperm(vector unsigned long long __a, vector unsigned long long __b,
8239 vector unsigned char __c) {
8240 return vec_perm(__a, __b, __c);
8241}
8242
8243static __inline__ vector double __ATTRS_o_ai
8244vec_vperm(vector double __a, vector double __b, vector unsigned char __c) {
8245 return vec_perm(__a, __b, __c);
8246}
8247#endif
8248
8249/* vec_re */
8250
8251static __inline__ vector float __ATTRS_o_ai vec_re(vector float __a) {
8252#ifdef __VSX__
8253 return __builtin_vsx_xvresp(__a);
8254#else
8255 return __builtin_altivec_vrefp(__a);
8256#endif
8257}
8258
8259#ifdef __VSX__
8260static __inline__ vector double __ATTRS_o_ai vec_re(vector double __a) {
8261 return __builtin_vsx_xvredp(__a);
8262}
8263#endif
8264
8265/* vec_vrefp */
8266
8267static __inline__ vector float __attribute__((__always_inline__))
8268vec_vrefp(vector float __a) {
8269 return __builtin_altivec_vrefp(__a);
8270}
8271
8272/* vec_rl */
8273
8274static __inline__ vector signed char __ATTRS_o_ai
8275vec_rl(vector signed char __a, vector unsigned char __b) {
8276 return (vector signed char)__builtin_altivec_vrlb((vector char)__a, __b);
8277}
8278
8279static __inline__ vector unsigned char __ATTRS_o_ai
8280vec_rl(vector unsigned char __a, vector unsigned char __b) {
8281 return (vector unsigned char)__builtin_altivec_vrlb((vector char)__a, __b);
8282}
8283
8284static __inline__ vector short __ATTRS_o_ai vec_rl(vector short __a,
8285 vector unsigned short __b) {
8286 return __builtin_altivec_vrlh(__a, __b);
8287}
8288
8289static __inline__ vector unsigned short __ATTRS_o_ai
8290vec_rl(vector unsigned short __a, vector unsigned short __b) {
8291 return (vector unsigned short)__builtin_altivec_vrlh((vector short)__a, __b);
8292}
8293
8294static __inline__ vector int __ATTRS_o_ai vec_rl(vector int __a,
8295 vector unsigned int __b) {
8296 return __builtin_altivec_vrlw(__a, __b);
8297}
8298
8299static __inline__ vector unsigned int __ATTRS_o_ai
8300vec_rl(vector unsigned int __a, vector unsigned int __b) {
8301 return (vector unsigned int)__builtin_altivec_vrlw((vector int)__a, __b);
8302}
8303
8304#ifdef __POWER8_VECTOR__
8305static __inline__ vector signed long long __ATTRS_o_ai
8306vec_rl(vector signed long long __a, vector unsigned long long __b) {
8307 return __builtin_altivec_vrld(__a, __b);
8308}
8309
8310static __inline__ vector unsigned long long __ATTRS_o_ai
8311vec_rl(vector unsigned long long __a, vector unsigned long long __b) {
8312 return (vector unsigned long long)__builtin_altivec_vrld(
8313 (vector long long)__a, __b);
8314}
8315#endif
8316
8317#if defined(__POWER10_VECTOR__) && defined(__SIZEOF_INT128__)
8318static __inline__ vector signed __int128 __ATTRS_o_ai
8319vec_rl(vector signed __int128 __a, vector unsigned __int128 __b) {
8320 return (vector signed __int128)(((vector unsigned __int128)__b
8321 << (vector unsigned __int128)__a) |
8322 ((vector unsigned __int128)__b >>
8323 ((__CHAR_BIT__ *
8324 sizeof(vector unsigned __int128)) -
8325 (vector unsigned __int128)__a)));
8326}
8327
8328static __inline__ vector unsigned __int128 __ATTRS_o_ai
8329vec_rl(vector unsigned __int128 __a, vector unsigned __int128 __b) {
8330 return (__b << __a)|(__b >> ((__CHAR_BIT__ * sizeof(vector unsigned __int128)) - __a));
8331}
8332#endif
8333
8334/* vec_rlmi */
8335#ifdef __POWER9_VECTOR__
8336static __inline__ vector unsigned int __ATTRS_o_ai
8337vec_rlmi(vector unsigned int __a, vector unsigned int __b,
8338 vector unsigned int __c) {
8339 return __builtin_altivec_vrlwmi(__a, __c, __b);
8340}
8341
8342static __inline__ vector unsigned long long __ATTRS_o_ai
8343vec_rlmi(vector unsigned long long __a, vector unsigned long long __b,
8344 vector unsigned long long __c) {
8345 return __builtin_altivec_vrldmi(__a, __c, __b);
8346}
8347#endif
8348
8349#if defined(__POWER10_VECTOR__) && defined(__SIZEOF_INT128__)
8350static __inline__ vector unsigned __int128 __ATTRS_o_ai
8351vec_rlmi(vector unsigned __int128 __a, vector unsigned __int128 __b,
8352 vector unsigned __int128 __c) {
8353 return __builtin_altivec_vrlqmi(__a, __c, __b);
8354}
8355
8356static __inline__ vector signed __int128 __ATTRS_o_ai
8357vec_rlmi(vector signed __int128 __a, vector signed __int128 __b,
8358 vector signed __int128 __c) {
8359 return (vector signed __int128)__builtin_altivec_vrlqmi(
8360 (vector unsigned __int128)__a, (vector unsigned __int128)__c,
8361 (vector unsigned __int128)__b);
8362}
8363#endif
8364
8365/* vec_rlnm */
8366#ifdef __POWER9_VECTOR__
8367static __inline__ vector unsigned int __ATTRS_o_ai
8368vec_rlnm(vector unsigned int __a, vector unsigned int __b,
8369 vector unsigned int __c) {
8370 vector unsigned int OneByte = { 0x8, 0x8, 0x8, 0x8 };
8371 return __builtin_altivec_vrlwnm(__a, ((__c << OneByte) | __b));
8372}
8373
8374static __inline__ vector unsigned long long __ATTRS_o_ai
8375vec_rlnm(vector unsigned long long __a, vector unsigned long long __b,
8376 vector unsigned long long __c) {
8377 vector unsigned long long OneByte = { 0x8, 0x8 };
8378 return __builtin_altivec_vrldnm(__a, ((__c << OneByte) | __b));
8379}
8380#endif
8381
8382#if defined(__POWER10_VECTOR__) && defined(__SIZEOF_INT128__)
8383static __inline__ vector unsigned __int128 __ATTRS_o_ai
8384vec_rlnm(vector unsigned __int128 __a, vector unsigned __int128 __b,
8385 vector unsigned __int128 __c) {
8386 // Merge __b and __c using an appropriate shuffle.
8387 vector unsigned char TmpB = (vector unsigned char)__b;
8388 vector unsigned char TmpC = (vector unsigned char)__c;
8389 vector unsigned char MaskAndShift =
8390#ifdef __LITTLE_ENDIAN__
8391 __builtin_shufflevector(TmpB, TmpC, -1, -1, -1, -1, -1, -1, -1, -1, 16, 0,
8392 1, -1, -1, -1, -1, -1);
8393#else
8394 __builtin_shufflevector(TmpB, TmpC, -1, -1, -1, -1, -1, 31, 30, 15, -1,
8395 -1, -1, -1, -1, -1, -1, -1);
8396#endif
8397 return __builtin_altivec_vrlqnm(__a, (vector unsigned __int128) MaskAndShift);
8398}
8399
8400static __inline__ vector signed __int128 __ATTRS_o_ai
8401vec_rlnm(vector signed __int128 __a, vector signed __int128 __b,
8402 vector signed __int128 __c) {
8403 // Merge __b and __c using an appropriate shuffle.
8404 vector unsigned char TmpB = (vector unsigned char)__b;
8405 vector unsigned char TmpC = (vector unsigned char)__c;
8406 vector unsigned char MaskAndShift =
8407#ifdef __LITTLE_ENDIAN__
8408 __builtin_shufflevector(TmpB, TmpC, -1, -1, -1, -1, -1, -1, -1, -1, 16, 0,
8409 1, -1, -1, -1, -1, -1);
8410#else
8411 __builtin_shufflevector(TmpB, TmpC, -1, -1, -1, -1, -1, 31, 30, 15, -1,
8412 -1, -1, -1, -1, -1, -1, -1);
8413#endif
8414 return (vector signed __int128)__builtin_altivec_vrlqnm(
8415 (vector unsigned __int128)__a, (vector unsigned __int128)MaskAndShift);
8416}
8417#endif
8418
8419/* vec_vrlb */
8420
8421static __inline__ vector signed char __ATTRS_o_ai
8422vec_vrlb(vector signed char __a, vector unsigned char __b) {
8423 return (vector signed char)__builtin_altivec_vrlb((vector char)__a, __b);
8424}
8425
8426static __inline__ vector unsigned char __ATTRS_o_ai
8427vec_vrlb(vector unsigned char __a, vector unsigned char __b) {
8428 return (vector unsigned char)__builtin_altivec_vrlb((vector char)__a, __b);
8429}
8430
8431/* vec_vrlh */
8432
8433static __inline__ vector short __ATTRS_o_ai
8434vec_vrlh(vector short __a, vector unsigned short __b) {
8435 return __builtin_altivec_vrlh(__a, __b);
8436}
8437
8438static __inline__ vector unsigned short __ATTRS_o_ai
8439vec_vrlh(vector unsigned short __a, vector unsigned short __b) {
8440 return (vector unsigned short)__builtin_altivec_vrlh((vector short)__a, __b);
8441}
8442
8443/* vec_vrlw */
8444
8445static __inline__ vector int __ATTRS_o_ai vec_vrlw(vector int __a,
8446 vector unsigned int __b) {
8447 return __builtin_altivec_vrlw(__a, __b);
8448}
8449
8450static __inline__ vector unsigned int __ATTRS_o_ai
8451vec_vrlw(vector unsigned int __a, vector unsigned int __b) {
8452 return (vector unsigned int)__builtin_altivec_vrlw((vector int)__a, __b);
8453}
8454
8455/* vec_round */
8456
8457static __inline__ vector float __ATTRS_o_ai vec_round(vector float __a) {
8458 return __builtin_altivec_vrfin(__a);
8459}
8460
8461#ifdef __VSX__
8462#ifdef __XL_COMPAT_ALTIVEC__
8463static __inline__ vector double __ATTRS_o_ai vec_rint(vector double __a);
8464static __inline__ vector double __ATTRS_o_ai vec_round(vector double __a) {
8465 double __fpscr = __builtin_readflm();
8466 __builtin_setrnd(0);
8467 vector double __rounded = vec_rint(__a);
8468 __builtin_setflm(__fpscr);
8469 return __rounded;
8470}
8471#else
8472static __inline__ vector double __ATTRS_o_ai vec_round(vector double __a) {
8473 return __builtin_vsx_xvrdpi(__a);
8474}
8475#endif
8476
8477/* vec_rint */
8478
8479static __inline__ vector float __ATTRS_o_ai vec_rint(vector float __a) {
8480 return __builtin_vsx_xvrspic(__a);
8481}
8482
8483static __inline__ vector double __ATTRS_o_ai vec_rint(vector double __a) {
8484 return __builtin_vsx_xvrdpic(__a);
8485}
8486
8487/* vec_roundc */
8488
8489static __inline__ vector float __ATTRS_o_ai vec_roundc(vector float __a) {
8490 return __builtin_vsx_xvrspic(__a);
8491}
8492
8493static __inline__ vector double __ATTRS_o_ai vec_roundc(vector double __a) {
8494 return __builtin_vsx_xvrdpic(__a);
8495}
8496
8497/* vec_nearbyint */
8498
8499static __inline__ vector float __ATTRS_o_ai vec_nearbyint(vector float __a) {
8500 return __builtin_vsx_xvrspi(__a);
8501}
8502
8503static __inline__ vector double __ATTRS_o_ai vec_nearbyint(vector double __a) {
8504 return __builtin_vsx_xvrdpi(__a);
8505}
8506#endif
8507
8508/* vec_vrfin */
8509
8510static __inline__ vector float __attribute__((__always_inline__))
8511vec_vrfin(vector float __a) {
8512 return __builtin_altivec_vrfin(__a);
8513}
8514
8515/* vec_sqrt */
8516
8517#ifdef __VSX__
8518static __inline__ vector float __ATTRS_o_ai vec_sqrt(vector float __a) {
8519 return __builtin_vsx_xvsqrtsp(__a);
8520}
8521
8522static __inline__ vector double __ATTRS_o_ai vec_sqrt(vector double __a) {
8523 return __builtin_vsx_xvsqrtdp(__a);
8524}
8525#endif
8526
8527/* vec_rsqrte */
8528
8529static __inline__ vector float __ATTRS_o_ai vec_rsqrte(vector float __a) {
8530#ifdef __VSX__
8531 return __builtin_vsx_xvrsqrtesp(__a);
8532#else
8533 return __builtin_altivec_vrsqrtefp(__a);
8534#endif
8535}
8536
8537#ifdef __VSX__
8538static __inline__ vector double __ATTRS_o_ai vec_rsqrte(vector double __a) {
8539 return __builtin_vsx_xvrsqrtedp(__a);
8540}
8541#endif
8542
8543static vector float __ATTRS_o_ai vec_rsqrt(vector float __a) {
8544 return __builtin_ppc_rsqrtf(__a);
8545}
8546
8547#ifdef __VSX__
8548static vector double __ATTRS_o_ai vec_rsqrt(vector double __a) {
8549 return __builtin_ppc_rsqrtd(__a);
8550}
8551#endif
8552
8553/* vec_vrsqrtefp */
8554
8555static __inline__ __vector float __attribute__((__always_inline__))
8556vec_vrsqrtefp(vector float __a) {
8557 return __builtin_altivec_vrsqrtefp(__a);
8558}
8559
8560/* vec_xvtsqrt */
8561
8562#ifdef __VSX__
8563static __inline__ int __ATTRS_o_ai vec_test_swsqrt(vector double __a) {
8564 return __builtin_vsx_xvtsqrtdp(__a);
8565}
8566
8567static __inline__ int __ATTRS_o_ai vec_test_swsqrts(vector float __a) {
8568 return __builtin_vsx_xvtsqrtsp(__a);
8569}
8570#endif
8571
8572/* vec_sel */
8573
8574#define __builtin_altivec_vsel_4si vec_sel
8575
8576static __inline__ vector signed char __ATTRS_o_ai vec_sel(
8577 vector signed char __a, vector signed char __b, vector unsigned char __c) {
8578 return (__a & ~(vector signed char)__c) | (__b & (vector signed char)__c);
8579}
8580
8581static __inline__ vector signed char __ATTRS_o_ai
8582vec_sel(vector signed char __a, vector signed char __b, vector bool char __c) {
8583 return (__a & ~(vector signed char)__c) | (__b & (vector signed char)__c);
8584}
8585
8586static __inline__ vector unsigned char __ATTRS_o_ai
8587vec_sel(vector unsigned char __a, vector unsigned char __b,
8588 vector unsigned char __c) {
8589 return (__a & ~__c) | (__b & __c);
8590}
8591
8592static __inline__ vector unsigned char __ATTRS_o_ai vec_sel(
8593 vector unsigned char __a, vector unsigned char __b, vector bool char __c) {
8594 return (__a & ~(vector unsigned char)__c) | (__b & (vector unsigned char)__c);
8595}
8596
8597static __inline__ vector bool char __ATTRS_o_ai
8598vec_sel(vector bool char __a, vector bool char __b, vector unsigned char __c) {
8599 return (__a & ~(vector bool char)__c) | (__b & (vector bool char)__c);
8600}
8601
8602static __inline__ vector bool char __ATTRS_o_ai vec_sel(vector bool char __a,
8603 vector bool char __b,
8604 vector bool char __c) {
8605 return (__a & ~__c) | (__b & __c);
8606}
8607
8608static __inline__ vector short __ATTRS_o_ai vec_sel(vector short __a,
8609 vector short __b,
8610 vector unsigned short __c) {
8611 return (__a & ~(vector short)__c) | (__b & (vector short)__c);
8612}
8613
8614static __inline__ vector short __ATTRS_o_ai vec_sel(vector short __a,
8615 vector short __b,
8616 vector bool short __c) {
8617 return (__a & ~(vector short)__c) | (__b & (vector short)__c);
8618}
8619
8620static __inline__ vector unsigned short __ATTRS_o_ai
8621vec_sel(vector unsigned short __a, vector unsigned short __b,
8622 vector unsigned short __c) {
8623 return (__a & ~__c) | (__b & __c);
8624}
8625
8626static __inline__ vector unsigned short __ATTRS_o_ai
8627vec_sel(vector unsigned short __a, vector unsigned short __b,
8628 vector bool short __c) {
8629 return (__a & ~(vector unsigned short)__c) |
8630 (__b & (vector unsigned short)__c);
8631}
8632
8633static __inline__ vector bool short __ATTRS_o_ai vec_sel(
8634 vector bool short __a, vector bool short __b, vector unsigned short __c) {
8635 return (__a & ~(vector bool short)__c) | (__b & (vector bool short)__c);
8636}
8637
8638static __inline__ vector bool short __ATTRS_o_ai
8639vec_sel(vector bool short __a, vector bool short __b, vector bool short __c) {
8640 return (__a & ~__c) | (__b & __c);
8641}
8642
8643static __inline__ vector int __ATTRS_o_ai vec_sel(vector int __a,
8644 vector int __b,
8645 vector unsigned int __c) {
8646 return (__a & ~(vector int)__c) | (__b & (vector int)__c);
8647}
8648
8649static __inline__ vector int __ATTRS_o_ai vec_sel(vector int __a,
8650 vector int __b,
8651 vector bool int __c) {
8652 return (__a & ~(vector int)__c) | (__b & (vector int)__c);
8653}
8654
8655static __inline__ vector unsigned int __ATTRS_o_ai vec_sel(
8656 vector unsigned int __a, vector unsigned int __b, vector unsigned int __c) {
8657 return (__a & ~__c) | (__b & __c);
8658}
8659
8660static __inline__ vector unsigned int __ATTRS_o_ai
8661vec_sel(vector unsigned int __a, vector unsigned int __b, vector bool int __c) {
8662 return (__a & ~(vector unsigned int)__c) | (__b & (vector unsigned int)__c);
8663}
8664
8665static __inline__ vector bool int __ATTRS_o_ai
8666vec_sel(vector bool int __a, vector bool int __b, vector unsigned int __c) {
8667 return (__a & ~(vector bool int)__c) | (__b & (vector bool int)__c);
8668}
8669
8670static __inline__ vector bool int __ATTRS_o_ai vec_sel(vector bool int __a,
8671 vector bool int __b,
8672 vector bool int __c) {
8673 return (__a & ~__c) | (__b & __c);
8674}
8675
8676static __inline__ vector float __ATTRS_o_ai vec_sel(vector float __a,
8677 vector float __b,
8678 vector unsigned int __c) {
8679 vector int __res = ((vector int)__a & ~(vector int)__c) |
8680 ((vector int)__b & (vector int)__c);
8681 return (vector float)__res;
8682}
8683
8684static __inline__ vector float __ATTRS_o_ai vec_sel(vector float __a,
8685 vector float __b,
8686 vector bool int __c) {
8687 vector int __res = ((vector int)__a & ~(vector int)__c) |
8688 ((vector int)__b & (vector int)__c);
8689 return (vector float)__res;
8690}
8691
8692#ifdef __VSX__
8693static __inline__ vector double __ATTRS_o_ai
8694vec_sel(vector double __a, vector double __b, vector bool long long __c) {
8695 vector long long __res = ((vector long long)__a & ~(vector long long)__c) |
8696 ((vector long long)__b & (vector long long)__c);
8697 return (vector double)__res;
8698}
8699
8700static __inline__ vector double __ATTRS_o_ai
8701vec_sel(vector double __a, vector double __b, vector unsigned long long __c) {
8702 vector long long __res = ((vector long long)__a & ~(vector long long)__c) |
8703 ((vector long long)__b & (vector long long)__c);
8704 return (vector double)__res;
8705}
8706
8707static __inline__ vector bool long long __ATTRS_o_ai
8708vec_sel(vector bool long long __a, vector bool long long __b,
8709 vector bool long long __c) {
8710 return (__a & ~__c) | (__b & __c);
8711}
8712
8713static __inline__ vector bool long long __ATTRS_o_ai
8714vec_sel(vector bool long long __a, vector bool long long __b,
8715 vector unsigned long long __c) {
8716 return (__a & ~(vector bool long long)__c) |
8717 (__b & (vector bool long long)__c);
8718}
8719
8720static __inline__ vector signed long long __ATTRS_o_ai
8721vec_sel(vector signed long long __a, vector signed long long __b,
8722 vector bool long long __c) {
8723 return (__a & ~(vector signed long long)__c) |
8724 (__b & (vector signed long long)__c);
8725}
8726
8727static __inline__ vector signed long long __ATTRS_o_ai
8728vec_sel(vector signed long long __a, vector signed long long __b,
8729 vector unsigned long long __c) {
8730 return (__a & ~(vector signed long long)__c) |
8731 (__b & (vector signed long long)__c);
8732}
8733
8734static __inline__ vector unsigned long long __ATTRS_o_ai
8735vec_sel(vector unsigned long long __a, vector unsigned long long __b,
8736 vector bool long long __c) {
8737 return (__a & ~(vector unsigned long long)__c) |
8738 (__b & (vector unsigned long long)__c);
8739}
8740
8741static __inline__ vector unsigned long long __ATTRS_o_ai
8742vec_sel(vector unsigned long long __a, vector unsigned long long __b,
8743 vector unsigned long long __c) {
8744 return (__a & ~__c) | (__b & __c);
8745}
8746#endif
8747
8748/* vec_vsel */
8749
8750static __inline__ vector signed char __ATTRS_o_ai vec_vsel(
8751 vector signed char __a, vector signed char __b, vector unsigned char __c) {
8752 return (__a & ~(vector signed char)__c) | (__b & (vector signed char)__c);
8753}
8754
8755static __inline__ vector signed char __ATTRS_o_ai
8756vec_vsel(vector signed char __a, vector signed char __b, vector bool char __c) {
8757 return (__a & ~(vector signed char)__c) | (__b & (vector signed char)__c);
8758}
8759
8760static __inline__ vector unsigned char __ATTRS_o_ai
8761vec_vsel(vector unsigned char __a, vector unsigned char __b,
8762 vector unsigned char __c) {
8763 return (__a & ~__c) | (__b & __c);
8764}
8765
8766static __inline__ vector unsigned char __ATTRS_o_ai vec_vsel(
8767 vector unsigned char __a, vector unsigned char __b, vector bool char __c) {
8768 return (__a & ~(vector unsigned char)__c) | (__b & (vector unsigned char)__c);
8769}
8770
8771static __inline__ vector bool char __ATTRS_o_ai
8772vec_vsel(vector bool char __a, vector bool char __b, vector unsigned char __c) {
8773 return (__a & ~(vector bool char)__c) | (__b & (vector bool char)__c);
8774}
8775
8776static __inline__ vector bool char __ATTRS_o_ai vec_vsel(vector bool char __a,
8777 vector bool char __b,
8778 vector bool char __c) {
8779 return (__a & ~__c) | (__b & __c);
8780}
8781
8782static __inline__ vector short __ATTRS_o_ai
8783vec_vsel(vector short __a, vector short __b, vector unsigned short __c) {
8784 return (__a & ~(vector short)__c) | (__b & (vector short)__c);
8785}
8786
8787static __inline__ vector short __ATTRS_o_ai vec_vsel(vector short __a,
8788 vector short __b,
8789 vector bool short __c) {
8790 return (__a & ~(vector short)__c) | (__b & (vector short)__c);
8791}
8792
8793static __inline__ vector unsigned short __ATTRS_o_ai
8794vec_vsel(vector unsigned short __a, vector unsigned short __b,
8795 vector unsigned short __c) {
8796 return (__a & ~__c) | (__b & __c);
8797}
8798
8799static __inline__ vector unsigned short __ATTRS_o_ai
8800vec_vsel(vector unsigned short __a, vector unsigned short __b,
8801 vector bool short __c) {
8802 return (__a & ~(vector unsigned short)__c) |
8803 (__b & (vector unsigned short)__c);
8804}
8805
8806static __inline__ vector bool short __ATTRS_o_ai vec_vsel(
8807 vector bool short __a, vector bool short __b, vector unsigned short __c) {
8808 return (__a & ~(vector bool short)__c) | (__b & (vector bool short)__c);
8809}
8810
8811static __inline__ vector bool short __ATTRS_o_ai
8812vec_vsel(vector bool short __a, vector bool short __b, vector bool short __c) {
8813 return (__a & ~__c) | (__b & __c);
8814}
8815
8816static __inline__ vector int __ATTRS_o_ai vec_vsel(vector int __a,
8817 vector int __b,
8818 vector unsigned int __c) {
8819 return (__a & ~(vector int)__c) | (__b & (vector int)__c);
8820}
8821
8822static __inline__ vector int __ATTRS_o_ai vec_vsel(vector int __a,
8823 vector int __b,
8824 vector bool int __c) {
8825 return (__a & ~(vector int)__c) | (__b & (vector int)__c);
8826}
8827
8828static __inline__ vector unsigned int __ATTRS_o_ai vec_vsel(
8829 vector unsigned int __a, vector unsigned int __b, vector unsigned int __c) {
8830 return (__a & ~__c) | (__b & __c);
8831}
8832
8833static __inline__ vector unsigned int __ATTRS_o_ai vec_vsel(
8834 vector unsigned int __a, vector unsigned int __b, vector bool int __c) {
8835 return (__a & ~(vector unsigned int)__c) | (__b & (vector unsigned int)__c);
8836}
8837
8838static __inline__ vector bool int __ATTRS_o_ai
8839vec_vsel(vector bool int __a, vector bool int __b, vector unsigned int __c) {
8840 return (__a & ~(vector bool int)__c) | (__b & (vector bool int)__c);
8841}
8842
8843static __inline__ vector bool int __ATTRS_o_ai vec_vsel(vector bool int __a,
8844 vector bool int __b,
8845 vector bool int __c) {
8846 return (__a & ~__c) | (__b & __c);
8847}
8848
8849static __inline__ vector float __ATTRS_o_ai vec_vsel(vector float __a,
8850 vector float __b,
8851 vector unsigned int __c) {
8852 vector int __res = ((vector int)__a & ~(vector int)__c) |
8853 ((vector int)__b & (vector int)__c);
8854 return (vector float)__res;
8855}
8856
8857static __inline__ vector float __ATTRS_o_ai vec_vsel(vector float __a,
8858 vector float __b,
8859 vector bool int __c) {
8860 vector int __res = ((vector int)__a & ~(vector int)__c) |
8861 ((vector int)__b & (vector int)__c);
8862 return (vector float)__res;
8863}
8864
8865/* vec_sl */
8866
8867// vec_sl does modulo arithmetic on __b first, so __b is allowed to be more
8868// than the length of __a.
8869static __inline__ vector unsigned char __ATTRS_o_ai
8870vec_sl(vector unsigned char __a, vector unsigned char __b) {
8871 return __a << (__b %
8872 (vector unsigned char)(sizeof(unsigned char) * __CHAR_BIT__));
8873}
8874
8875static __inline__ vector signed char __ATTRS_o_ai
8876vec_sl(vector signed char __a, vector unsigned char __b) {
8877 return (vector signed char)vec_sl((vector unsigned char)__a, __b);
8878}
8879
8880static __inline__ vector unsigned short __ATTRS_o_ai
8881vec_sl(vector unsigned short __a, vector unsigned short __b) {
8882 return __a << (__b % (vector unsigned short)(sizeof(unsigned short) *
8883 __CHAR_BIT__));
8884}
8885
8886static __inline__ vector short __ATTRS_o_ai vec_sl(vector short __a,
8887 vector unsigned short __b) {
8888 return (vector short)vec_sl((vector unsigned short)__a, __b);
8889}
8890
8891static __inline__ vector unsigned int __ATTRS_o_ai
8892vec_sl(vector unsigned int __a, vector unsigned int __b) {
8893 return __a << (__b %
8894 (vector unsigned int)(sizeof(unsigned int) * __CHAR_BIT__));
8895}
8896
8897static __inline__ vector int __ATTRS_o_ai vec_sl(vector int __a,
8898 vector unsigned int __b) {
8899 return (vector int)vec_sl((vector unsigned int)__a, __b);
8900}
8901
8902#ifdef __POWER8_VECTOR__
8903static __inline__ vector unsigned long long __ATTRS_o_ai
8904vec_sl(vector unsigned long long __a, vector unsigned long long __b) {
8905 return __a << (__b % (vector unsigned long long)(sizeof(unsigned long long) *
8906 __CHAR_BIT__));
8907}
8908
8909static __inline__ vector long long __ATTRS_o_ai
8910vec_sl(vector long long __a, vector unsigned long long __b) {
8911 return (vector long long)vec_sl((vector unsigned long long)__a, __b);
8912}
8913#elif defined(__VSX__)
8914static __inline__ vector unsigned char __ATTRS_o_ai
8915vec_vspltb(vector unsigned char __a, unsigned char __b);
8916static __inline__ vector unsigned long long __ATTRS_o_ai
8917vec_sl(vector unsigned long long __a, vector unsigned long long __b) {
8918 __b %= (vector unsigned long long)(sizeof(unsigned long long) * __CHAR_BIT__);
8919
8920 // Big endian element one (the right doubleword) can be left shifted as-is.
8921 // The other element needs to be swapped into the right doubleword and
8922 // shifted. Then the right doublewords of the two result vectors are merged.
8923 vector signed long long __rightelt =
8924 (vector signed long long)__builtin_altivec_vslo((vector signed int)__a,
8925 (vector signed int)__b);
8926#ifdef __LITTLE_ENDIAN__
8927 __rightelt = (vector signed long long)__builtin_altivec_vsl(
8928 (vector signed int)__rightelt,
8929 (vector signed int)vec_vspltb((vector unsigned char)__b, 0));
8930#else
8931 __rightelt = (vector signed long long)__builtin_altivec_vsl(
8932 (vector signed int)__rightelt,
8933 (vector signed int)vec_vspltb((vector unsigned char)__b, 15));
8934#endif
8935 __a = __builtin_shufflevector(__a, __a, 1, 0);
8936 __b = __builtin_shufflevector(__b, __b, 1, 0);
8937 vector signed long long __leftelt =
8938 (vector signed long long)__builtin_altivec_vslo((vector signed int)__a,
8939 (vector signed int)__b);
8940#ifdef __LITTLE_ENDIAN__
8941 __leftelt = (vector signed long long)__builtin_altivec_vsl(
8942 (vector signed int)__leftelt,
8943 (vector signed int)vec_vspltb((vector unsigned char)__b, 0));
8944 return (vector unsigned long long)__builtin_shufflevector(__rightelt,
8945 __leftelt, 0, 2);
8946#else
8947 __leftelt = (vector signed long long)__builtin_altivec_vsl(
8948 (vector signed int)__leftelt,
8949 (vector signed int)vec_vspltb((vector unsigned char)__b, 15));
8950 return (vector unsigned long long)__builtin_shufflevector(__leftelt,
8951 __rightelt, 1, 3);
8952#endif
8953}
8954
8955static __inline__ vector long long __ATTRS_o_ai
8956vec_sl(vector long long __a, vector unsigned long long __b) {
8957 return (vector long long)vec_sl((vector unsigned long long)__a, __b);
8958}
8959#endif /* __VSX__ */
8960
8961/* vec_vslb */
8962
8963#define __builtin_altivec_vslb vec_vslb
8964
8965static __inline__ vector signed char __ATTRS_o_ai
8966vec_vslb(vector signed char __a, vector unsigned char __b) {
8967 return vec_sl(__a, __b);
8968}
8969
8970static __inline__ vector unsigned char __ATTRS_o_ai
8971vec_vslb(vector unsigned char __a, vector unsigned char __b) {
8972 return vec_sl(__a, __b);
8973}
8974
8975/* vec_vslh */
8976
8977#define __builtin_altivec_vslh vec_vslh
8978
8979static __inline__ vector short __ATTRS_o_ai
8980vec_vslh(vector short __a, vector unsigned short __b) {
8981 return vec_sl(__a, __b);
8982}
8983
8984static __inline__ vector unsigned short __ATTRS_o_ai
8985vec_vslh(vector unsigned short __a, vector unsigned short __b) {
8986 return vec_sl(__a, __b);
8987}
8988
8989/* vec_vslw */
8990
8991#define __builtin_altivec_vslw vec_vslw
8992
8993static __inline__ vector int __ATTRS_o_ai vec_vslw(vector int __a,
8994 vector unsigned int __b) {
8995 return vec_sl(__a, __b);
8996}
8997
8998static __inline__ vector unsigned int __ATTRS_o_ai
8999vec_vslw(vector unsigned int __a, vector unsigned int __b) {
9000 return vec_sl(__a, __b);
9001}
9002
9003/* vec_sld */
9004
9005#define __builtin_altivec_vsldoi_4si vec_sld
9006
9007static __inline__ vector signed char __ATTRS_o_ai vec_sld(
9008 vector signed char __a, vector signed char __b, unsigned const int __c) {
9009 unsigned char __d = __c & 0x0F;
9010#ifdef __LITTLE_ENDIAN__
9011 return vec_perm(
9012 __b, __a, (vector unsigned char)(16 - __d, 17 - __d, 18 - __d, 19 - __d,
9013 20 - __d, 21 - __d, 22 - __d, 23 - __d,
9014 24 - __d, 25 - __d, 26 - __d, 27 - __d,
9015 28 - __d, 29 - __d, 30 - __d, 31 - __d));
9016#else
9017 return vec_perm(
9018 __a, __b,
9019 (vector unsigned char)(__d, __d + 1, __d + 2, __d + 3, __d + 4, __d + 5,
9020 __d + 6, __d + 7, __d + 8, __d + 9, __d + 10,
9021 __d + 11, __d + 12, __d + 13, __d + 14, __d + 15));
9022#endif
9023}
9024
9025static __inline__ vector unsigned char __ATTRS_o_ai
9026vec_sld(vector unsigned char __a, vector unsigned char __b,
9027 unsigned const int __c) {
9028 unsigned char __d = __c & 0x0F;
9029#ifdef __LITTLE_ENDIAN__
9030 return vec_perm(
9031 __b, __a, (vector unsigned char)(16 - __d, 17 - __d, 18 - __d, 19 - __d,
9032 20 - __d, 21 - __d, 22 - __d, 23 - __d,
9033 24 - __d, 25 - __d, 26 - __d, 27 - __d,
9034 28 - __d, 29 - __d, 30 - __d, 31 - __d));
9035#else
9036 return vec_perm(
9037 __a, __b,
9038 (vector unsigned char)(__d, __d + 1, __d + 2, __d + 3, __d + 4, __d + 5,
9039 __d + 6, __d + 7, __d + 8, __d + 9, __d + 10,
9040 __d + 11, __d + 12, __d + 13, __d + 14, __d + 15));
9041#endif
9042}
9043
9044static __inline__ vector bool char __ATTRS_o_ai
9045vec_sld(vector bool char __a, vector bool char __b, unsigned const int __c) {
9046 unsigned char __d = __c & 0x0F;
9047#ifdef __LITTLE_ENDIAN__
9048 return vec_perm(
9049 __b, __a, (vector unsigned char)(16 - __d, 17 - __d, 18 - __d, 19 - __d,
9050 20 - __d, 21 - __d, 22 - __d, 23 - __d,
9051 24 - __d, 25 - __d, 26 - __d, 27 - __d,
9052 28 - __d, 29 - __d, 30 - __d, 31 - __d));
9053#else
9054 return vec_perm(
9055 __a, __b,
9056 (vector unsigned char)(__d, __d + 1, __d + 2, __d + 3, __d + 4, __d + 5,
9057 __d + 6, __d + 7, __d + 8, __d + 9, __d + 10,
9058 __d + 11, __d + 12, __d + 13, __d + 14, __d + 15));
9059#endif
9060}
9061
9062static __inline__ vector signed short __ATTRS_o_ai vec_sld(
9063 vector signed short __a, vector signed short __b, unsigned const int __c) {
9064 unsigned char __d = __c & 0x0F;
9065#ifdef __LITTLE_ENDIAN__
9066 return vec_perm(
9067 __b, __a, (vector unsigned char)(16 - __d, 17 - __d, 18 - __d, 19 - __d,
9068 20 - __d, 21 - __d, 22 - __d, 23 - __d,
9069 24 - __d, 25 - __d, 26 - __d, 27 - __d,
9070 28 - __d, 29 - __d, 30 - __d, 31 - __d));
9071#else
9072 return vec_perm(
9073 __a, __b,
9074 (vector unsigned char)(__d, __d + 1, __d + 2, __d + 3, __d + 4, __d + 5,
9075 __d + 6, __d + 7, __d + 8, __d + 9, __d + 10,
9076 __d + 11, __d + 12, __d + 13, __d + 14, __d + 15));
9077#endif
9078}
9079
9080static __inline__ vector unsigned short __ATTRS_o_ai
9081vec_sld(vector unsigned short __a, vector unsigned short __b,
9082 unsigned const int __c) {
9083 unsigned char __d = __c & 0x0F;
9084#ifdef __LITTLE_ENDIAN__
9085 return vec_perm(
9086 __b, __a, (vector unsigned char)(16 - __d, 17 - __d, 18 - __d, 19 - __d,
9087 20 - __d, 21 - __d, 22 - __d, 23 - __d,
9088 24 - __d, 25 - __d, 26 - __d, 27 - __d,
9089 28 - __d, 29 - __d, 30 - __d, 31 - __d));
9090#else
9091 return vec_perm(
9092 __a, __b,
9093 (vector unsigned char)(__d, __d + 1, __d + 2, __d + 3, __d + 4, __d + 5,
9094 __d + 6, __d + 7, __d + 8, __d + 9, __d + 10,
9095 __d + 11, __d + 12, __d + 13, __d + 14, __d + 15));
9096#endif
9097}
9098
9099static __inline__ vector bool short __ATTRS_o_ai
9100vec_sld(vector bool short __a, vector bool short __b, unsigned const int __c) {
9101 unsigned char __d = __c & 0x0F;
9102#ifdef __LITTLE_ENDIAN__
9103 return vec_perm(
9104 __b, __a, (vector unsigned char)(16 - __d, 17 - __d, 18 - __d, 19 - __d,
9105 20 - __d, 21 - __d, 22 - __d, 23 - __d,
9106 24 - __d, 25 - __d, 26 - __d, 27 - __d,
9107 28 - __d, 29 - __d, 30 - __d, 31 - __d));
9108#else
9109 return vec_perm(
9110 __a, __b,
9111 (vector unsigned char)(__d, __d + 1, __d + 2, __d + 3, __d + 4, __d + 5,
9112 __d + 6, __d + 7, __d + 8, __d + 9, __d + 10,
9113 __d + 11, __d + 12, __d + 13, __d + 14, __d + 15));
9114#endif
9115}
9116
9117static __inline__ vector pixel __ATTRS_o_ai vec_sld(vector pixel __a,
9118 vector pixel __b,
9119 unsigned const int __c) {
9120 unsigned char __d = __c & 0x0F;
9121#ifdef __LITTLE_ENDIAN__
9122 return vec_perm(
9123 __b, __a, (vector unsigned char)(16 - __d, 17 - __d, 18 - __d, 19 - __d,
9124 20 - __d, 21 - __d, 22 - __d, 23 - __d,
9125 24 - __d, 25 - __d, 26 - __d, 27 - __d,
9126 28 - __d, 29 - __d, 30 - __d, 31 - __d));
9127#else
9128 return vec_perm(
9129 __a, __b,
9130 (vector unsigned char)(__d, __d + 1, __d + 2, __d + 3, __d + 4, __d + 5,
9131 __d + 6, __d + 7, __d + 8, __d + 9, __d + 10,
9132 __d + 11, __d + 12, __d + 13, __d + 14, __d + 15));
9133#endif
9134}
9135
9136static __inline__ vector signed int __ATTRS_o_ai
9137vec_sld(vector signed int __a, vector signed int __b, unsigned const int __c) {
9138 unsigned char __d = __c & 0x0F;
9139#ifdef __LITTLE_ENDIAN__
9140 return vec_perm(
9141 __b, __a, (vector unsigned char)(16 - __d, 17 - __d, 18 - __d, 19 - __d,
9142 20 - __d, 21 - __d, 22 - __d, 23 - __d,
9143 24 - __d, 25 - __d, 26 - __d, 27 - __d,
9144 28 - __d, 29 - __d, 30 - __d, 31 - __d));
9145#else
9146 return vec_perm(
9147 __a, __b,
9148 (vector unsigned char)(__d, __d + 1, __d + 2, __d + 3, __d + 4, __d + 5,
9149 __d + 6, __d + 7, __d + 8, __d + 9, __d + 10,
9150 __d + 11, __d + 12, __d + 13, __d + 14, __d + 15));
9151#endif
9152}
9153
9154static __inline__ vector unsigned int __ATTRS_o_ai vec_sld(
9155 vector unsigned int __a, vector unsigned int __b, unsigned const int __c) {
9156 unsigned char __d = __c & 0x0F;
9157#ifdef __LITTLE_ENDIAN__
9158 return vec_perm(
9159 __b, __a, (vector unsigned char)(16 - __d, 17 - __d, 18 - __d, 19 - __d,
9160 20 - __d, 21 - __d, 22 - __d, 23 - __d,
9161 24 - __d, 25 - __d, 26 - __d, 27 - __d,
9162 28 - __d, 29 - __d, 30 - __d, 31 - __d));
9163#else
9164 return vec_perm(
9165 __a, __b,
9166 (vector unsigned char)(__d, __d + 1, __d + 2, __d + 3, __d + 4, __d + 5,
9167 __d + 6, __d + 7, __d + 8, __d + 9, __d + 10,
9168 __d + 11, __d + 12, __d + 13, __d + 14, __d + 15));
9169#endif
9170}
9171
9172static __inline__ vector bool int __ATTRS_o_ai vec_sld(vector bool int __a,
9173 vector bool int __b,
9174 unsigned const int __c) {
9175 unsigned char __d = __c & 0x0F;
9176#ifdef __LITTLE_ENDIAN__
9177 return vec_perm(
9178 __b, __a, (vector unsigned char)(16 - __d, 17 - __d, 18 - __d, 19 - __d,
9179 20 - __d, 21 - __d, 22 - __d, 23 - __d,
9180 24 - __d, 25 - __d, 26 - __d, 27 - __d,
9181 28 - __d, 29 - __d, 30 - __d, 31 - __d));
9182#else
9183 return vec_perm(
9184 __a, __b,
9185 (vector unsigned char)(__d, __d + 1, __d + 2, __d + 3, __d + 4, __d + 5,
9186 __d + 6, __d + 7, __d + 8, __d + 9, __d + 10,
9187 __d + 11, __d + 12, __d + 13, __d + 14, __d + 15));
9188#endif
9189}
9190
9191static __inline__ vector float __ATTRS_o_ai vec_sld(vector float __a,
9192 vector float __b,
9193 unsigned const int __c) {
9194 unsigned char __d = __c & 0x0F;
9195#ifdef __LITTLE_ENDIAN__
9196 return vec_perm(
9197 __b, __a, (vector unsigned char)(16 - __d, 17 - __d, 18 - __d, 19 - __d,
9198 20 - __d, 21 - __d, 22 - __d, 23 - __d,
9199 24 - __d, 25 - __d, 26 - __d, 27 - __d,
9200 28 - __d, 29 - __d, 30 - __d, 31 - __d));
9201#else
9202 return vec_perm(
9203 __a, __b,
9204 (vector unsigned char)(__d, __d + 1, __d + 2, __d + 3, __d + 4, __d + 5,
9205 __d + 6, __d + 7, __d + 8, __d + 9, __d + 10,
9206 __d + 11, __d + 12, __d + 13, __d + 14, __d + 15));
9207#endif
9208}
9209
9210#ifdef __VSX__
9211static __inline__ vector bool long long __ATTRS_o_ai
9212vec_sld(vector bool long long __a, vector bool long long __b,
9213 unsigned const int __c) {
9214 unsigned char __d = __c & 0x0F;
9215#ifdef __LITTLE_ENDIAN__
9216 return vec_perm(
9217 __b, __a, (vector unsigned char)(16 - __d, 17 - __d, 18 - __d, 19 - __d,
9218 20 - __d, 21 - __d, 22 - __d, 23 - __d,
9219 24 - __d, 25 - __d, 26 - __d, 27 - __d,
9220 28 - __d, 29 - __d, 30 - __d, 31 - __d));
9221#else
9222 return vec_perm(
9223 __a, __b,
9224 (vector unsigned char)(__d, __d + 1, __d + 2, __d + 3, __d + 4, __d + 5,
9225 __d + 6, __d + 7, __d + 8, __d + 9, __d + 10,
9226 __d + 11, __d + 12, __d + 13, __d + 14, __d + 15));
9227#endif
9228}
9229
9230static __inline__ vector signed long long __ATTRS_o_ai
9231vec_sld(vector signed long long __a, vector signed long long __b,
9232 unsigned const int __c) {
9233 unsigned char __d = __c & 0x0F;
9234#ifdef __LITTLE_ENDIAN__
9235 return vec_perm(
9236 __b, __a, (vector unsigned char)(16 - __d, 17 - __d, 18 - __d, 19 - __d,
9237 20 - __d, 21 - __d, 22 - __d, 23 - __d,
9238 24 - __d, 25 - __d, 26 - __d, 27 - __d,
9239 28 - __d, 29 - __d, 30 - __d, 31 - __d));
9240#else
9241 return vec_perm(
9242 __a, __b,
9243 (vector unsigned char)(__d, __d + 1, __d + 2, __d + 3, __d + 4, __d + 5,
9244 __d + 6, __d + 7, __d + 8, __d + 9, __d + 10,
9245 __d + 11, __d + 12, __d + 13, __d + 14, __d + 15));
9246#endif
9247}
9248
9249static __inline__ vector unsigned long long __ATTRS_o_ai
9250vec_sld(vector unsigned long long __a, vector unsigned long long __b,
9251 unsigned const int __c) {
9252 unsigned char __d = __c & 0x0F;
9253#ifdef __LITTLE_ENDIAN__
9254 return vec_perm(
9255 __b, __a, (vector unsigned char)(16 - __d, 17 - __d, 18 - __d, 19 - __d,
9256 20 - __d, 21 - __d, 22 - __d, 23 - __d,
9257 24 - __d, 25 - __d, 26 - __d, 27 - __d,
9258 28 - __d, 29 - __d, 30 - __d, 31 - __d));
9259#else
9260 return vec_perm(
9261 __a, __b,
9262 (vector unsigned char)(__d, __d + 1, __d + 2, __d + 3, __d + 4, __d + 5,
9263 __d + 6, __d + 7, __d + 8, __d + 9, __d + 10,
9264 __d + 11, __d + 12, __d + 13, __d + 14, __d + 15));
9265#endif
9266}
9267
9268static __inline__ vector double __ATTRS_o_ai vec_sld(vector double __a,
9269 vector double __b,
9270 unsigned const int __c) {
9271 unsigned char __d = __c & 0x0F;
9272#ifdef __LITTLE_ENDIAN__
9273 return vec_perm(
9274 __b, __a, (vector unsigned char)(16 - __d, 17 - __d, 18 - __d, 19 - __d,
9275 20 - __d, 21 - __d, 22 - __d, 23 - __d,
9276 24 - __d, 25 - __d, 26 - __d, 27 - __d,
9277 28 - __d, 29 - __d, 30 - __d, 31 - __d));
9278#else
9279 return vec_perm(
9280 __a, __b,
9281 (vector unsigned char)(__d, __d + 1, __d + 2, __d + 3, __d + 4, __d + 5,
9282 __d + 6, __d + 7, __d + 8, __d + 9, __d + 10,
9283 __d + 11, __d + 12, __d + 13, __d + 14, __d + 15));
9284#endif
9285}
9286#endif
9287
9288/* vec_sldw */
9289static __inline__ vector signed char __ATTRS_o_ai vec_sldw(
9290 vector signed char __a, vector signed char __b, unsigned const int __c) {
9291 return vec_sld(__a, __b, ((__c << 2) & 0x0F));
9292}
9293
9294static __inline__ vector unsigned char __ATTRS_o_ai
9295vec_sldw(vector unsigned char __a, vector unsigned char __b,
9296 unsigned const int __c) {
9297 return vec_sld(__a, __b, ((__c << 2) & 0x0F));
9298}
9299
9300static __inline__ vector signed short __ATTRS_o_ai vec_sldw(
9301 vector signed short __a, vector signed short __b, unsigned const int __c) {
9302 return vec_sld(__a, __b, ((__c << 2) & 0x0F));
9303}
9304
9305static __inline__ vector unsigned short __ATTRS_o_ai
9306vec_sldw(vector unsigned short __a, vector unsigned short __b,
9307 unsigned const int __c) {
9308 return vec_sld(__a, __b, ((__c << 2) & 0x0F));
9309}
9310
9311static __inline__ vector signed int __ATTRS_o_ai
9312vec_sldw(vector signed int __a, vector signed int __b, unsigned const int __c) {
9313 return vec_sld(__a, __b, ((__c << 2) & 0x0F));
9314}
9315
9316static __inline__ vector unsigned int __ATTRS_o_ai vec_sldw(
9317 vector unsigned int __a, vector unsigned int __b, unsigned const int __c) {
9318 return vec_sld(__a, __b, ((__c << 2) & 0x0F));
9319}
9320
9321static __inline__ vector float __ATTRS_o_ai vec_sldw(
9322 vector float __a, vector float __b, unsigned const int __c) {
9323 return vec_sld(__a, __b, ((__c << 2) & 0x0F));
9324}
9325
9326#ifdef __VSX__
9327static __inline__ vector signed long long __ATTRS_o_ai
9328vec_sldw(vector signed long long __a, vector signed long long __b,
9329 unsigned const int __c) {
9330 return vec_sld(__a, __b, ((__c << 2) & 0x0F));
9331}
9332
9333static __inline__ vector unsigned long long __ATTRS_o_ai
9334vec_sldw(vector unsigned long long __a, vector unsigned long long __b,
9335 unsigned const int __c) {
9336 return vec_sld(__a, __b, ((__c << 2) & 0x0F));
9337}
9338
9339static __inline__ vector double __ATTRS_o_ai vec_sldw(
9340 vector double __a, vector double __b, unsigned const int __c) {
9341 return vec_sld(__a, __b, ((__c << 2) & 0x0F));
9342}
9343#endif
9344
9345#ifdef __POWER9_VECTOR__
9346/* vec_slv */
9347static __inline__ vector unsigned char __ATTRS_o_ai
9348vec_slv(vector unsigned char __a, vector unsigned char __b) {
9349 return __builtin_altivec_vslv(__a, __b);
9350}
9351
9352/* vec_srv */
9353static __inline__ vector unsigned char __ATTRS_o_ai
9354vec_srv(vector unsigned char __a, vector unsigned char __b) {
9355 return __builtin_altivec_vsrv(__a, __b);
9356}
9357#endif
9358
9359/* vec_vsldoi */
9360
9361static __inline__ vector signed char __ATTRS_o_ai
9362vec_vsldoi(vector signed char __a, vector signed char __b, unsigned char __c) {
9363 unsigned char __d = __c & 0x0F;
9364#ifdef __LITTLE_ENDIAN__
9365 return vec_perm(
9366 __b, __a, (vector unsigned char)(16 - __d, 17 - __d, 18 - __d, 19 - __d,
9367 20 - __d, 21 - __d, 22 - __d, 23 - __d,
9368 24 - __d, 25 - __d, 26 - __d, 27 - __d,
9369 28 - __d, 29 - __d, 30 - __d, 31 - __d));
9370#else
9371 return vec_perm(
9372 __a, __b,
9373 (vector unsigned char)(__d, __d + 1, __d + 2, __d + 3, __d + 4, __d + 5,
9374 __d + 6, __d + 7, __d + 8, __d + 9, __d + 10,
9375 __d + 11, __d + 12, __d + 13, __d + 14, __d + 15));
9376#endif
9377}
9378
9379static __inline__ vector unsigned char __ATTRS_o_ai vec_vsldoi(
9380 vector unsigned char __a, vector unsigned char __b, unsigned char __c) {
9381 unsigned char __d = __c & 0x0F;
9382#ifdef __LITTLE_ENDIAN__
9383 return vec_perm(
9384 __b, __a, (vector unsigned char)(16 - __d, 17 - __d, 18 - __d, 19 - __d,
9385 20 - __d, 21 - __d, 22 - __d, 23 - __d,
9386 24 - __d, 25 - __d, 26 - __d, 27 - __d,
9387 28 - __d, 29 - __d, 30 - __d, 31 - __d));
9388#else
9389 return vec_perm(
9390 __a, __b,
9391 (vector unsigned char)(__d, __d + 1, __d + 2, __d + 3, __d + 4, __d + 5,
9392 __d + 6, __d + 7, __d + 8, __d + 9, __d + 10,
9393 __d + 11, __d + 12, __d + 13, __d + 14, __d + 15));
9394#endif
9395}
9396
9397static __inline__ vector short __ATTRS_o_ai vec_vsldoi(vector short __a,
9398 vector short __b,
9399 unsigned char __c) {
9400 unsigned char __d = __c & 0x0F;
9401#ifdef __LITTLE_ENDIAN__
9402 return vec_perm(
9403 __b, __a, (vector unsigned char)(16 - __d, 17 - __d, 18 - __d, 19 - __d,
9404 20 - __d, 21 - __d, 22 - __d, 23 - __d,
9405 24 - __d, 25 - __d, 26 - __d, 27 - __d,
9406 28 - __d, 29 - __d, 30 - __d, 31 - __d));
9407#else
9408 return vec_perm(
9409 __a, __b,
9410 (vector unsigned char)(__d, __d + 1, __d + 2, __d + 3, __d + 4, __d + 5,
9411 __d + 6, __d + 7, __d + 8, __d + 9, __d + 10,
9412 __d + 11, __d + 12, __d + 13, __d + 14, __d + 15));
9413#endif
9414}
9415
9416static __inline__ vector unsigned short __ATTRS_o_ai vec_vsldoi(
9417 vector unsigned short __a, vector unsigned short __b, unsigned char __c) {
9418 unsigned char __d = __c & 0x0F;
9419#ifdef __LITTLE_ENDIAN__
9420 return vec_perm(
9421 __b, __a, (vector unsigned char)(16 - __d, 17 - __d, 18 - __d, 19 - __d,
9422 20 - __d, 21 - __d, 22 - __d, 23 - __d,
9423 24 - __d, 25 - __d, 26 - __d, 27 - __d,
9424 28 - __d, 29 - __d, 30 - __d, 31 - __d));
9425#else
9426 return vec_perm(
9427 __a, __b,
9428 (vector unsigned char)(__d, __d + 1, __d + 2, __d + 3, __d + 4, __d + 5,
9429 __d + 6, __d + 7, __d + 8, __d + 9, __d + 10,
9430 __d + 11, __d + 12, __d + 13, __d + 14, __d + 15));
9431#endif
9432}
9433
9434static __inline__ vector pixel __ATTRS_o_ai vec_vsldoi(vector pixel __a,
9435 vector pixel __b,
9436 unsigned char __c) {
9437 unsigned char __d = __c & 0x0F;
9438#ifdef __LITTLE_ENDIAN__
9439 return vec_perm(
9440 __b, __a, (vector unsigned char)(16 - __d, 17 - __d, 18 - __d, 19 - __d,
9441 20 - __d, 21 - __d, 22 - __d, 23 - __d,
9442 24 - __d, 25 - __d, 26 - __d, 27 - __d,
9443 28 - __d, 29 - __d, 30 - __d, 31 - __d));
9444#else
9445 return vec_perm(
9446 __a, __b,
9447 (vector unsigned char)(__d, __d + 1, __d + 2, __d + 3, __d + 4, __d + 5,
9448 __d + 6, __d + 7, __d + 8, __d + 9, __d + 10,
9449 __d + 11, __d + 12, __d + 13, __d + 14, __d + 15));
9450#endif
9451}
9452
9453static __inline__ vector int __ATTRS_o_ai vec_vsldoi(vector int __a,
9454 vector int __b,
9455 unsigned char __c) {
9456 unsigned char __d = __c & 0x0F;
9457#ifdef __LITTLE_ENDIAN__
9458 return vec_perm(
9459 __b, __a, (vector unsigned char)(16 - __d, 17 - __d, 18 - __d, 19 - __d,
9460 20 - __d, 21 - __d, 22 - __d, 23 - __d,
9461 24 - __d, 25 - __d, 26 - __d, 27 - __d,
9462 28 - __d, 29 - __d, 30 - __d, 31 - __d));
9463#else
9464 return vec_perm(
9465 __a, __b,
9466 (vector unsigned char)(__d, __d + 1, __d + 2, __d + 3, __d + 4, __d + 5,
9467 __d + 6, __d + 7, __d + 8, __d + 9, __d + 10,
9468 __d + 11, __d + 12, __d + 13, __d + 14, __d + 15));
9469#endif
9470}
9471
9472static __inline__ vector unsigned int __ATTRS_o_ai vec_vsldoi(
9473 vector unsigned int __a, vector unsigned int __b, unsigned char __c) {
9474 unsigned char __d = __c & 0x0F;
9475#ifdef __LITTLE_ENDIAN__
9476 return vec_perm(
9477 __b, __a, (vector unsigned char)(16 - __d, 17 - __d, 18 - __d, 19 - __d,
9478 20 - __d, 21 - __d, 22 - __d, 23 - __d,
9479 24 - __d, 25 - __d, 26 - __d, 27 - __d,
9480 28 - __d, 29 - __d, 30 - __d, 31 - __d));
9481#else
9482 return vec_perm(
9483 __a, __b,
9484 (vector unsigned char)(__d, __d + 1, __d + 2, __d + 3, __d + 4, __d + 5,
9485 __d + 6, __d + 7, __d + 8, __d + 9, __d + 10,
9486 __d + 11, __d + 12, __d + 13, __d + 14, __d + 15));
9487#endif
9488}
9489
9490static __inline__ vector float __ATTRS_o_ai vec_vsldoi(vector float __a,
9491 vector float __b,
9492 unsigned char __c) {
9493 unsigned char __d = __c & 0x0F;
9494#ifdef __LITTLE_ENDIAN__
9495 return vec_perm(
9496 __b, __a, (vector unsigned char)(16 - __d, 17 - __d, 18 - __d, 19 - __d,
9497 20 - __d, 21 - __d, 22 - __d, 23 - __d,
9498 24 - __d, 25 - __d, 26 - __d, 27 - __d,
9499 28 - __d, 29 - __d, 30 - __d, 31 - __d));
9500#else
9501 return vec_perm(
9502 __a, __b,
9503 (vector unsigned char)(__d, __d + 1, __d + 2, __d + 3, __d + 4, __d + 5,
9504 __d + 6, __d + 7, __d + 8, __d + 9, __d + 10,
9505 __d + 11, __d + 12, __d + 13, __d + 14, __d + 15));
9506#endif
9507}
9508
9509/* vec_sll */
9510
9511static __inline__ vector signed char __ATTRS_o_ai
9512vec_sll(vector signed char __a, vector unsigned char __b) {
9513 return (vector signed char)__builtin_altivec_vsl((vector int)__a,
9514 (vector int)__b);
9515}
9516
9517static __inline__ vector signed char __ATTRS_o_ai
9518vec_sll(vector signed char __a, vector unsigned short __b) {
9519 return (vector signed char)__builtin_altivec_vsl((vector int)__a,
9520 (vector int)__b);
9521}
9522
9523static __inline__ vector signed char __ATTRS_o_ai
9524vec_sll(vector signed char __a, vector unsigned int __b) {
9525 return (vector signed char)__builtin_altivec_vsl((vector int)__a,
9526 (vector int)__b);
9527}
9528
9529static __inline__ vector unsigned char __ATTRS_o_ai
9530vec_sll(vector unsigned char __a, vector unsigned char __b) {
9531 return (vector unsigned char)__builtin_altivec_vsl((vector int)__a,
9532 (vector int)__b);
9533}
9534
9535static __inline__ vector unsigned char __ATTRS_o_ai
9536vec_sll(vector unsigned char __a, vector unsigned short __b) {
9537 return (vector unsigned char)__builtin_altivec_vsl((vector int)__a,
9538 (vector int)__b);
9539}
9540
9541static __inline__ vector unsigned char __ATTRS_o_ai
9542vec_sll(vector unsigned char __a, vector unsigned int __b) {
9543 return (vector unsigned char)__builtin_altivec_vsl((vector int)__a,
9544 (vector int)__b);
9545}
9546
9547static __inline__ vector bool char __ATTRS_o_ai
9548vec_sll(vector bool char __a, vector unsigned char __b) {
9549 return (vector bool char)__builtin_altivec_vsl((vector int)__a,
9550 (vector int)__b);
9551}
9552
9553static __inline__ vector bool char __ATTRS_o_ai
9554vec_sll(vector bool char __a, vector unsigned short __b) {
9555 return (vector bool char)__builtin_altivec_vsl((vector int)__a,
9556 (vector int)__b);
9557}
9558
9559static __inline__ vector bool char __ATTRS_o_ai
9560vec_sll(vector bool char __a, vector unsigned int __b) {
9561 return (vector bool char)__builtin_altivec_vsl((vector int)__a,
9562 (vector int)__b);
9563}
9564
9565static __inline__ vector short __ATTRS_o_ai vec_sll(vector short __a,
9566 vector unsigned char __b) {
9567 return (vector short)__builtin_altivec_vsl((vector int)__a, (vector int)__b);
9568}
9569
9570static __inline__ vector short __ATTRS_o_ai vec_sll(vector short __a,
9571 vector unsigned short __b) {
9572 return (vector short)__builtin_altivec_vsl((vector int)__a, (vector int)__b);
9573}
9574
9575static __inline__ vector short __ATTRS_o_ai vec_sll(vector short __a,
9576 vector unsigned int __b) {
9577 return (vector short)__builtin_altivec_vsl((vector int)__a, (vector int)__b);
9578}
9579
9580static __inline__ vector unsigned short __ATTRS_o_ai
9581vec_sll(vector unsigned short __a, vector unsigned char __b) {
9582 return (vector unsigned short)__builtin_altivec_vsl((vector int)__a,
9583 (vector int)__b);
9584}
9585
9586static __inline__ vector unsigned short __ATTRS_o_ai
9587vec_sll(vector unsigned short __a, vector unsigned short __b) {
9588 return (vector unsigned short)__builtin_altivec_vsl((vector int)__a,
9589 (vector int)__b);
9590}
9591
9592static __inline__ vector unsigned short __ATTRS_o_ai
9593vec_sll(vector unsigned short __a, vector unsigned int __b) {
9594 return (vector unsigned short)__builtin_altivec_vsl((vector int)__a,
9595 (vector int)__b);
9596}
9597
9598static __inline__ vector bool short __ATTRS_o_ai
9599vec_sll(vector bool short __a, vector unsigned char __b) {
9600 return (vector bool short)__builtin_altivec_vsl((vector int)__a,
9601 (vector int)__b);
9602}
9603
9604static __inline__ vector bool short __ATTRS_o_ai
9605vec_sll(vector bool short __a, vector unsigned short __b) {
9606 return (vector bool short)__builtin_altivec_vsl((vector int)__a,
9607 (vector int)__b);
9608}
9609
9610static __inline__ vector bool short __ATTRS_o_ai
9611vec_sll(vector bool short __a, vector unsigned int __b) {
9612 return (vector bool short)__builtin_altivec_vsl((vector int)__a,
9613 (vector int)__b);
9614}
9615
9616static __inline__ vector pixel __ATTRS_o_ai vec_sll(vector pixel __a,
9617 vector unsigned char __b) {
9618 return (vector pixel)__builtin_altivec_vsl((vector int)__a, (vector int)__b);
9619}
9620
9621static __inline__ vector pixel __ATTRS_o_ai vec_sll(vector pixel __a,
9622 vector unsigned short __b) {
9623 return (vector pixel)__builtin_altivec_vsl((vector int)__a, (vector int)__b);
9624}
9625
9626static __inline__ vector pixel __ATTRS_o_ai vec_sll(vector pixel __a,
9627 vector unsigned int __b) {
9628 return (vector pixel)__builtin_altivec_vsl((vector int)__a, (vector int)__b);
9629}
9630
9631static __inline__ vector int __ATTRS_o_ai vec_sll(vector int __a,
9632 vector unsigned char __b) {
9633 return (vector int)__builtin_altivec_vsl(__a, (vector int)__b);
9634}
9635
9636static __inline__ vector int __ATTRS_o_ai vec_sll(vector int __a,
9637 vector unsigned short __b) {
9638 return (vector int)__builtin_altivec_vsl(__a, (vector int)__b);
9639}
9640
9641static __inline__ vector int __ATTRS_o_ai vec_sll(vector int __a,
9642 vector unsigned int __b) {
9643 return (vector int)__builtin_altivec_vsl(__a, (vector int)__b);
9644}
9645
9646static __inline__ vector unsigned int __ATTRS_o_ai
9647vec_sll(vector unsigned int __a, vector unsigned char __b) {
9648 return (vector unsigned int)__builtin_altivec_vsl((vector int)__a,
9649 (vector int)__b);
9650}
9651
9652static __inline__ vector unsigned int __ATTRS_o_ai
9653vec_sll(vector unsigned int __a, vector unsigned short __b) {
9654 return (vector unsigned int)__builtin_altivec_vsl((vector int)__a,
9655 (vector int)__b);
9656}
9657
9658static __inline__ vector unsigned int __ATTRS_o_ai
9659vec_sll(vector unsigned int __a, vector unsigned int __b) {
9660 return (vector unsigned int)__builtin_altivec_vsl((vector int)__a,
9661 (vector int)__b);
9662}
9663
9664static __inline__ vector bool int __ATTRS_o_ai
9665vec_sll(vector bool int __a, vector unsigned char __b) {
9666 return (vector bool int)__builtin_altivec_vsl((vector int)__a,
9667 (vector int)__b);
9668}
9669
9670static __inline__ vector bool int __ATTRS_o_ai
9671vec_sll(vector bool int __a, vector unsigned short __b) {
9672 return (vector bool int)__builtin_altivec_vsl((vector int)__a,
9673 (vector int)__b);
9674}
9675
9676static __inline__ vector bool int __ATTRS_o_ai
9677vec_sll(vector bool int __a, vector unsigned int __b) {
9678 return (vector bool int)__builtin_altivec_vsl((vector int)__a,
9679 (vector int)__b);
9680}
9681
9682#ifdef __VSX__
9683static __inline__ vector signed long long __ATTRS_o_ai
9684vec_sll(vector signed long long __a, vector unsigned char __b) {
9685 return (vector signed long long)__builtin_altivec_vsl((vector int)__a,
9686 (vector int)__b);
9687}
9688
9689static __inline__ vector unsigned long long __ATTRS_o_ai
9690vec_sll(vector unsigned long long __a, vector unsigned char __b) {
9691 return (vector unsigned long long)__builtin_altivec_vsl((vector int)__a,
9692 (vector int)__b);
9693}
9694#endif
9695
9696/* vec_vsl */
9697
9698static __inline__ vector signed char __ATTRS_o_ai
9699vec_vsl(vector signed char __a, vector unsigned char __b) {
9700 return (vector signed char)__builtin_altivec_vsl((vector int)__a,
9701 (vector int)__b);
9702}
9703
9704static __inline__ vector signed char __ATTRS_o_ai
9705vec_vsl(vector signed char __a, vector unsigned short __b) {
9706 return (vector signed char)__builtin_altivec_vsl((vector int)__a,
9707 (vector int)__b);
9708}
9709
9710static __inline__ vector signed char __ATTRS_o_ai
9711vec_vsl(vector signed char __a, vector unsigned int __b) {
9712 return (vector signed char)__builtin_altivec_vsl((vector int)__a,
9713 (vector int)__b);
9714}
9715
9716static __inline__ vector unsigned char __ATTRS_o_ai
9717vec_vsl(vector unsigned char __a, vector unsigned char __b) {
9718 return (vector unsigned char)__builtin_altivec_vsl((vector int)__a,
9719 (vector int)__b);
9720}
9721
9722static __inline__ vector unsigned char __ATTRS_o_ai
9723vec_vsl(vector unsigned char __a, vector unsigned short __b) {
9724 return (vector unsigned char)__builtin_altivec_vsl((vector int)__a,
9725 (vector int)__b);
9726}
9727
9728static __inline__ vector unsigned char __ATTRS_o_ai
9729vec_vsl(vector unsigned char __a, vector unsigned int __b) {
9730 return (vector unsigned char)__builtin_altivec_vsl((vector int)__a,
9731 (vector int)__b);
9732}
9733
9734static __inline__ vector bool char __ATTRS_o_ai
9735vec_vsl(vector bool char __a, vector unsigned char __b) {
9736 return (vector bool char)__builtin_altivec_vsl((vector int)__a,
9737 (vector int)__b);
9738}
9739
9740static __inline__ vector bool char __ATTRS_o_ai
9741vec_vsl(vector bool char __a, vector unsigned short __b) {
9742 return (vector bool char)__builtin_altivec_vsl((vector int)__a,
9743 (vector int)__b);
9744}
9745
9746static __inline__ vector bool char __ATTRS_o_ai
9747vec_vsl(vector bool char __a, vector unsigned int __b) {
9748 return (vector bool char)__builtin_altivec_vsl((vector int)__a,
9749 (vector int)__b);
9750}
9751
9752static __inline__ vector short __ATTRS_o_ai vec_vsl(vector short __a,
9753 vector unsigned char __b) {
9754 return (vector short)__builtin_altivec_vsl((vector int)__a, (vector int)__b);
9755}
9756
9757static __inline__ vector short __ATTRS_o_ai vec_vsl(vector short __a,
9758 vector unsigned short __b) {
9759 return (vector short)__builtin_altivec_vsl((vector int)__a, (vector int)__b);
9760}
9761
9762static __inline__ vector short __ATTRS_o_ai vec_vsl(vector short __a,
9763 vector unsigned int __b) {
9764 return (vector short)__builtin_altivec_vsl((vector int)__a, (vector int)__b);
9765}
9766
9767static __inline__ vector unsigned short __ATTRS_o_ai
9768vec_vsl(vector unsigned short __a, vector unsigned char __b) {
9769 return (vector unsigned short)__builtin_altivec_vsl((vector int)__a,
9770 (vector int)__b);
9771}
9772
9773static __inline__ vector unsigned short __ATTRS_o_ai
9774vec_vsl(vector unsigned short __a, vector unsigned short __b) {
9775 return (vector unsigned short)__builtin_altivec_vsl((vector int)__a,
9776 (vector int)__b);
9777}
9778
9779static __inline__ vector unsigned short __ATTRS_o_ai
9780vec_vsl(vector unsigned short __a, vector unsigned int __b) {
9781 return (vector unsigned short)__builtin_altivec_vsl((vector int)__a,
9782 (vector int)__b);
9783}
9784
9785static __inline__ vector bool short __ATTRS_o_ai
9786vec_vsl(vector bool short __a, vector unsigned char __b) {
9787 return (vector bool short)__builtin_altivec_vsl((vector int)__a,
9788 (vector int)__b);
9789}
9790
9791static __inline__ vector bool short __ATTRS_o_ai
9792vec_vsl(vector bool short __a, vector unsigned short __b) {
9793 return (vector bool short)__builtin_altivec_vsl((vector int)__a,
9794 (vector int)__b);
9795}
9796
9797static __inline__ vector bool short __ATTRS_o_ai
9798vec_vsl(vector bool short __a, vector unsigned int __b) {
9799 return (vector bool short)__builtin_altivec_vsl((vector int)__a,
9800 (vector int)__b);
9801}
9802
9803static __inline__ vector pixel __ATTRS_o_ai vec_vsl(vector pixel __a,
9804 vector unsigned char __b) {
9805 return (vector pixel)__builtin_altivec_vsl((vector int)__a, (vector int)__b);
9806}
9807
9808static __inline__ vector pixel __ATTRS_o_ai vec_vsl(vector pixel __a,
9809 vector unsigned short __b) {
9810 return (vector pixel)__builtin_altivec_vsl((vector int)__a, (vector int)__b);
9811}
9812
9813static __inline__ vector pixel __ATTRS_o_ai vec_vsl(vector pixel __a,
9814 vector unsigned int __b) {
9815 return (vector pixel)__builtin_altivec_vsl((vector int)__a, (vector int)__b);
9816}
9817
9818static __inline__ vector int __ATTRS_o_ai vec_vsl(vector int __a,
9819 vector unsigned char __b) {
9820 return (vector int)__builtin_altivec_vsl(__a, (vector int)__b);
9821}
9822
9823static __inline__ vector int __ATTRS_o_ai vec_vsl(vector int __a,
9824 vector unsigned short __b) {
9825 return (vector int)__builtin_altivec_vsl(__a, (vector int)__b);
9826}
9827
9828static __inline__ vector int __ATTRS_o_ai vec_vsl(vector int __a,
9829 vector unsigned int __b) {
9830 return (vector int)__builtin_altivec_vsl(__a, (vector int)__b);
9831}
9832
9833static __inline__ vector unsigned int __ATTRS_o_ai
9834vec_vsl(vector unsigned int __a, vector unsigned char __b) {
9835 return (vector unsigned int)__builtin_altivec_vsl((vector int)__a,
9836 (vector int)__b);
9837}
9838
9839static __inline__ vector unsigned int __ATTRS_o_ai
9840vec_vsl(vector unsigned int __a, vector unsigned short __b) {
9841 return (vector unsigned int)__builtin_altivec_vsl((vector int)__a,
9842 (vector int)__b);
9843}
9844
9845static __inline__ vector unsigned int __ATTRS_o_ai
9846vec_vsl(vector unsigned int __a, vector unsigned int __b) {
9847 return (vector unsigned int)__builtin_altivec_vsl((vector int)__a,
9848 (vector int)__b);
9849}
9850
9851static __inline__ vector bool int __ATTRS_o_ai
9852vec_vsl(vector bool int __a, vector unsigned char __b) {
9853 return (vector bool int)__builtin_altivec_vsl((vector int)__a,
9854 (vector int)__b);
9855}
9856
9857static __inline__ vector bool int __ATTRS_o_ai
9858vec_vsl(vector bool int __a, vector unsigned short __b) {
9859 return (vector bool int)__builtin_altivec_vsl((vector int)__a,
9860 (vector int)__b);
9861}
9862
9863static __inline__ vector bool int __ATTRS_o_ai
9864vec_vsl(vector bool int __a, vector unsigned int __b) {
9865 return (vector bool int)__builtin_altivec_vsl((vector int)__a,
9866 (vector int)__b);
9867}
9868
9869/* vec_slo */
9870
9871static __inline__ vector signed char __ATTRS_o_ai
9872vec_slo(vector signed char __a, vector signed char __b) {
9873 return (vector signed char)__builtin_altivec_vslo((vector int)__a,
9874 (vector int)__b);
9875}
9876
9877static __inline__ vector signed char __ATTRS_o_ai
9878vec_slo(vector signed char __a, vector unsigned char __b) {
9879 return (vector signed char)__builtin_altivec_vslo((vector int)__a,
9880 (vector int)__b);
9881}
9882
9883static __inline__ vector unsigned char __ATTRS_o_ai
9884vec_slo(vector unsigned char __a, vector signed char __b) {
9885 return (vector unsigned char)__builtin_altivec_vslo((vector int)__a,
9886 (vector int)__b);
9887}
9888
9889static __inline__ vector unsigned char __ATTRS_o_ai
9890vec_slo(vector unsigned char __a, vector unsigned char __b) {
9891 return (vector unsigned char)__builtin_altivec_vslo((vector int)__a,
9892 (vector int)__b);
9893}
9894
9895static __inline__ vector short __ATTRS_o_ai vec_slo(vector short __a,
9896 vector signed char __b) {
9897 return (vector short)__builtin_altivec_vslo((vector int)__a, (vector int)__b);
9898}
9899
9900static __inline__ vector short __ATTRS_o_ai vec_slo(vector short __a,
9901 vector unsigned char __b) {
9902 return (vector short)__builtin_altivec_vslo((vector int)__a, (vector int)__b);
9903}
9904
9905static __inline__ vector unsigned short __ATTRS_o_ai
9906vec_slo(vector unsigned short __a, vector signed char __b) {
9907 return (vector unsigned short)__builtin_altivec_vslo((vector int)__a,
9908 (vector int)__b);
9909}
9910
9911static __inline__ vector unsigned short __ATTRS_o_ai
9912vec_slo(vector unsigned short __a, vector unsigned char __b) {
9913 return (vector unsigned short)__builtin_altivec_vslo((vector int)__a,
9914 (vector int)__b);
9915}
9916
9917static __inline__ vector pixel __ATTRS_o_ai vec_slo(vector pixel __a,
9918 vector signed char __b) {
9919 return (vector pixel)__builtin_altivec_vslo((vector int)__a, (vector int)__b);
9920}
9921
9922static __inline__ vector pixel __ATTRS_o_ai vec_slo(vector pixel __a,
9923 vector unsigned char __b) {
9924 return (vector pixel)__builtin_altivec_vslo((vector int)__a, (vector int)__b);
9925}
9926
9927static __inline__ vector int __ATTRS_o_ai vec_slo(vector int __a,
9928 vector signed char __b) {
9929 return (vector int)__builtin_altivec_vslo(__a, (vector int)__b);
9930}
9931
9932static __inline__ vector int __ATTRS_o_ai vec_slo(vector int __a,
9933 vector unsigned char __b) {
9934 return (vector int)__builtin_altivec_vslo(__a, (vector int)__b);
9935}
9936
9937static __inline__ vector unsigned int __ATTRS_o_ai
9938vec_slo(vector unsigned int __a, vector signed char __b) {
9939 return (vector unsigned int)__builtin_altivec_vslo((vector int)__a,
9940 (vector int)__b);
9941}
9942
9943static __inline__ vector unsigned int __ATTRS_o_ai
9944vec_slo(vector unsigned int __a, vector unsigned char __b) {
9945 return (vector unsigned int)__builtin_altivec_vslo((vector int)__a,
9946 (vector int)__b);
9947}
9948
9949static __inline__ vector float __ATTRS_o_ai vec_slo(vector float __a,
9950 vector signed char __b) {
9951 return (vector float)__builtin_altivec_vslo((vector int)__a, (vector int)__b);
9952}
9953
9954static __inline__ vector float __ATTRS_o_ai vec_slo(vector float __a,
9955 vector unsigned char __b) {
9956 return (vector float)__builtin_altivec_vslo((vector int)__a, (vector int)__b);
9957}
9958
9959#ifdef __VSX__
9960static __inline__ vector signed long long __ATTRS_o_ai
9961vec_slo(vector signed long long __a, vector signed char __b) {
9962 return (vector signed long long)__builtin_altivec_vslo((vector int)__a,
9963 (vector int)__b);
9964}
9965
9966static __inline__ vector signed long long __ATTRS_o_ai
9967vec_slo(vector signed long long __a, vector unsigned char __b) {
9968 return (vector signed long long)__builtin_altivec_vslo((vector int)__a,
9969 (vector int)__b);
9970}
9971
9972static __inline__ vector unsigned long long __ATTRS_o_ai
9973vec_slo(vector unsigned long long __a, vector signed char __b) {
9974 return (vector unsigned long long)__builtin_altivec_vslo((vector int)__a,
9975 (vector int)__b);
9976}
9977
9978static __inline__ vector unsigned long long __ATTRS_o_ai
9979vec_slo(vector unsigned long long __a, vector unsigned char __b) {
9980 return (vector unsigned long long)__builtin_altivec_vslo((vector int)__a,
9981 (vector int)__b);
9982}
9983#endif
9984
9985/* vec_vslo */
9986
9987static __inline__ vector signed char __ATTRS_o_ai
9988vec_vslo(vector signed char __a, vector signed char __b) {
9989 return (vector signed char)__builtin_altivec_vslo((vector int)__a,
9990 (vector int)__b);
9991}
9992
9993static __inline__ vector signed char __ATTRS_o_ai
9994vec_vslo(vector signed char __a, vector unsigned char __b) {
9995 return (vector signed char)__builtin_altivec_vslo((vector int)__a,
9996 (vector int)__b);
9997}
9998
9999static __inline__ vector unsigned char __ATTRS_o_ai
10000vec_vslo(vector unsigned char __a, vector signed char __b) {
10001 return (vector unsigned char)__builtin_altivec_vslo((vector int)__a,
10002 (vector int)__b);
10003}
10004
10005static __inline__ vector unsigned char __ATTRS_o_ai
10006vec_vslo(vector unsigned char __a, vector unsigned char __b) {
10007 return (vector unsigned char)__builtin_altivec_vslo((vector int)__a,
10008 (vector int)__b);
10009}
10010
10011static __inline__ vector short __ATTRS_o_ai vec_vslo(vector short __a,
10012 vector signed char __b) {
10013 return (vector short)__builtin_altivec_vslo((vector int)__a, (vector int)__b);
10014}
10015
10016static __inline__ vector short __ATTRS_o_ai vec_vslo(vector short __a,
10017 vector unsigned char __b) {
10018 return (vector short)__builtin_altivec_vslo((vector int)__a, (vector int)__b);
10019}
10020
10021static __inline__ vector unsigned short __ATTRS_o_ai
10022vec_vslo(vector unsigned short __a, vector signed char __b) {
10023 return (vector unsigned short)__builtin_altivec_vslo((vector int)__a,
10024 (vector int)__b);
10025}
10026
10027static __inline__ vector unsigned short __ATTRS_o_ai
10028vec_vslo(vector unsigned short __a, vector unsigned char __b) {
10029 return (vector unsigned short)__builtin_altivec_vslo((vector int)__a,
10030 (vector int)__b);
10031}
10032
10033static __inline__ vector pixel __ATTRS_o_ai vec_vslo(vector pixel __a,
10034 vector signed char __b) {
10035 return (vector pixel)__builtin_altivec_vslo((vector int)__a, (vector int)__b);
10036}
10037
10038static __inline__ vector pixel __ATTRS_o_ai vec_vslo(vector pixel __a,
10039 vector unsigned char __b) {
10040 return (vector pixel)__builtin_altivec_vslo((vector int)__a, (vector int)__b);
10041}
10042
10043static __inline__ vector int __ATTRS_o_ai vec_vslo(vector int __a,
10044 vector signed char __b) {
10045 return (vector int)__builtin_altivec_vslo(__a, (vector int)__b);
10046}
10047
10048static __inline__ vector int __ATTRS_o_ai vec_vslo(vector int __a,
10049 vector unsigned char __b) {
10050 return (vector int)__builtin_altivec_vslo(__a, (vector int)__b);
10051}
10052
10053static __inline__ vector unsigned int __ATTRS_o_ai
10054vec_vslo(vector unsigned int __a, vector signed char __b) {
10055 return (vector unsigned int)__builtin_altivec_vslo((vector int)__a,
10056 (vector int)__b);
10057}
10058
10059static __inline__ vector unsigned int __ATTRS_o_ai
10060vec_vslo(vector unsigned int __a, vector unsigned char __b) {
10061 return (vector unsigned int)__builtin_altivec_vslo((vector int)__a,
10062 (vector int)__b);
10063}
10064
10065static __inline__ vector float __ATTRS_o_ai vec_vslo(vector float __a,
10066 vector signed char __b) {
10067 return (vector float)__builtin_altivec_vslo((vector int)__a, (vector int)__b);
10068}
10069
10070static __inline__ vector float __ATTRS_o_ai vec_vslo(vector float __a,
10071 vector unsigned char __b) {
10072 return (vector float)__builtin_altivec_vslo((vector int)__a, (vector int)__b);
10073}
10074
10075/* vec_splat */
10076
10077static __inline__ vector signed char __ATTRS_o_ai
10078vec_splat(vector signed char __a, unsigned const int __b) {
10079 return vec_perm(__a, __a, (vector unsigned char)(__b & 0x0F));
10080}
10081
10082static __inline__ vector unsigned char __ATTRS_o_ai
10083vec_splat(vector unsigned char __a, unsigned const int __b) {
10084 return vec_perm(__a, __a, (vector unsigned char)(__b & 0x0F));
10085}
10086
10087static __inline__ vector bool char __ATTRS_o_ai
10088vec_splat(vector bool char __a, unsigned const int __b) {
10089 return vec_perm(__a, __a, (vector unsigned char)(__b & 0x0F));
10090}
10091
10092static __inline__ vector signed short __ATTRS_o_ai
10093vec_splat(vector signed short __a, unsigned const int __b) {
10094 unsigned char b0 = (__b & 0x07) * 2;
10095 unsigned char b1 = b0 + 1;
10096 return vec_perm(__a, __a,
10097 (vector unsigned char)(b0, b1, b0, b1, b0, b1, b0, b1, b0, b1,
10098 b0, b1, b0, b1, b0, b1));
10099}
10100
10101static __inline__ vector unsigned short __ATTRS_o_ai
10102vec_splat(vector unsigned short __a, unsigned const int __b) {
10103 unsigned char b0 = (__b & 0x07) * 2;
10104 unsigned char b1 = b0 + 1;
10105 return vec_perm(__a, __a,
10106 (vector unsigned char)(b0, b1, b0, b1, b0, b1, b0, b1, b0, b1,
10107 b0, b1, b0, b1, b0, b1));
10108}
10109
10110static __inline__ vector bool short __ATTRS_o_ai
10111vec_splat(vector bool short __a, unsigned const int __b) {
10112 unsigned char b0 = (__b & 0x07) * 2;
10113 unsigned char b1 = b0 + 1;
10114 return vec_perm(__a, __a,
10115 (vector unsigned char)(b0, b1, b0, b1, b0, b1, b0, b1, b0, b1,
10116 b0, b1, b0, b1, b0, b1));
10117}
10118
10119static __inline__ vector pixel __ATTRS_o_ai vec_splat(vector pixel __a,
10120 unsigned const int __b) {
10121 unsigned char b0 = (__b & 0x07) * 2;
10122 unsigned char b1 = b0 + 1;
10123 return vec_perm(__a, __a,
10124 (vector unsigned char)(b0, b1, b0, b1, b0, b1, b0, b1, b0, b1,
10125 b0, b1, b0, b1, b0, b1));
10126}
10127
10128static __inline__ vector signed int __ATTRS_o_ai
10129vec_splat(vector signed int __a, unsigned const int __b) {
10130 unsigned char b0 = (__b & 0x03) * 4;
10131 unsigned char b1 = b0 + 1, b2 = b0 + 2, b3 = b0 + 3;
10132 return vec_perm(__a, __a,
10133 (vector unsigned char)(b0, b1, b2, b3, b0, b1, b2, b3, b0, b1,
10134 b2, b3, b0, b1, b2, b3));
10135}
10136
10137static __inline__ vector unsigned int __ATTRS_o_ai
10138vec_splat(vector unsigned int __a, unsigned const int __b) {
10139 unsigned char b0 = (__b & 0x03) * 4;
10140 unsigned char b1 = b0 + 1, b2 = b0 + 2, b3 = b0 + 3;
10141 return vec_perm(__a, __a,
10142 (vector unsigned char)(b0, b1, b2, b3, b0, b1, b2, b3, b0, b1,
10143 b2, b3, b0, b1, b2, b3));
10144}
10145
10146static __inline__ vector bool int __ATTRS_o_ai
10147vec_splat(vector bool int __a, unsigned const int __b) {
10148 unsigned char b0 = (__b & 0x03) * 4;
10149 unsigned char b1 = b0 + 1, b2 = b0 + 2, b3 = b0 + 3;
10150 return vec_perm(__a, __a,
10151 (vector unsigned char)(b0, b1, b2, b3, b0, b1, b2, b3, b0, b1,
10152 b2, b3, b0, b1, b2, b3));
10153}
10154
10155static __inline__ vector float __ATTRS_o_ai vec_splat(vector float __a,
10156 unsigned const int __b) {
10157 unsigned char b0 = (__b & 0x03) * 4;
10158 unsigned char b1 = b0 + 1, b2 = b0 + 2, b3 = b0 + 3;
10159 return vec_perm(__a, __a,
10160 (vector unsigned char)(b0, b1, b2, b3, b0, b1, b2, b3, b0, b1,
10161 b2, b3, b0, b1, b2, b3));
10162}
10163
10164#ifdef __VSX__
10165static __inline__ vector double __ATTRS_o_ai vec_splat(vector double __a,
10166 unsigned const int __b) {
10167 unsigned char b0 = (__b & 0x01) * 8;
10168 unsigned char b1 = b0 + 1, b2 = b0 + 2, b3 = b0 + 3, b4 = b0 + 4, b5 = b0 + 5,
10169 b6 = b0 + 6, b7 = b0 + 7;
10170 return vec_perm(__a, __a,
10171 (vector unsigned char)(b0, b1, b2, b3, b4, b5, b6, b7, b0, b1,
10172 b2, b3, b4, b5, b6, b7));
10173}
10174static __inline__ vector bool long long __ATTRS_o_ai
10175vec_splat(vector bool long long __a, unsigned const int __b) {
10176 unsigned char b0 = (__b & 0x01) * 8;
10177 unsigned char b1 = b0 + 1, b2 = b0 + 2, b3 = b0 + 3, b4 = b0 + 4, b5 = b0 + 5,
10178 b6 = b0 + 6, b7 = b0 + 7;
10179 return vec_perm(__a, __a,
10180 (vector unsigned char)(b0, b1, b2, b3, b4, b5, b6, b7, b0, b1,
10181 b2, b3, b4, b5, b6, b7));
10182}
10183static __inline__ vector signed long long __ATTRS_o_ai
10184vec_splat(vector signed long long __a, unsigned const int __b) {
10185 unsigned char b0 = (__b & 0x01) * 8;
10186 unsigned char b1 = b0 + 1, b2 = b0 + 2, b3 = b0 + 3, b4 = b0 + 4, b5 = b0 + 5,
10187 b6 = b0 + 6, b7 = b0 + 7;
10188 return vec_perm(__a, __a,
10189 (vector unsigned char)(b0, b1, b2, b3, b4, b5, b6, b7, b0, b1,
10190 b2, b3, b4, b5, b6, b7));
10191}
10192static __inline__ vector unsigned long long __ATTRS_o_ai
10193vec_splat(vector unsigned long long __a, unsigned const int __b) {
10194 unsigned char b0 = (__b & 0x01) * 8;
10195 unsigned char b1 = b0 + 1, b2 = b0 + 2, b3 = b0 + 3, b4 = b0 + 4, b5 = b0 + 5,
10196 b6 = b0 + 6, b7 = b0 + 7;
10197 return vec_perm(__a, __a,
10198 (vector unsigned char)(b0, b1, b2, b3, b4, b5, b6, b7, b0, b1,
10199 b2, b3, b4, b5, b6, b7));
10200}
10201#endif
10202
10203/* vec_vspltb */
10204
10205#define __builtin_altivec_vspltb vec_vspltb
10206
10207static __inline__ vector signed char __ATTRS_o_ai
10208vec_vspltb(vector signed char __a, unsigned char __b) {
10209 return vec_perm(__a, __a, (vector unsigned char)(__b));
10210}
10211
10212static __inline__ vector unsigned char __ATTRS_o_ai
10213vec_vspltb(vector unsigned char __a, unsigned char __b) {
10214 return vec_perm(__a, __a, (vector unsigned char)(__b));
10215}
10216
10217static __inline__ vector bool char __ATTRS_o_ai vec_vspltb(vector bool char __a,
10218 unsigned char __b) {
10219 return vec_perm(__a, __a, (vector unsigned char)(__b));
10220}
10221
10222/* vec_vsplth */
10223
10224#define __builtin_altivec_vsplth vec_vsplth
10225
10226static __inline__ vector short __ATTRS_o_ai vec_vsplth(vector short __a,
10227 unsigned char __b) {
10228 __b *= 2;
10229 unsigned char b1 = __b + 1;
10230 return vec_perm(__a, __a,
10231 (vector unsigned char)(__b, b1, __b, b1, __b, b1, __b, b1,
10232 __b, b1, __b, b1, __b, b1, __b, b1));
10233}
10234
10235static __inline__ vector unsigned short __ATTRS_o_ai
10236vec_vsplth(vector unsigned short __a, unsigned char __b) {
10237 __b *= 2;
10238 unsigned char b1 = __b + 1;
10239 return vec_perm(__a, __a,
10240 (vector unsigned char)(__b, b1, __b, b1, __b, b1, __b, b1,
10241 __b, b1, __b, b1, __b, b1, __b, b1));
10242}
10243
10244static __inline__ vector bool short __ATTRS_o_ai
10245vec_vsplth(vector bool short __a, unsigned char __b) {
10246 __b *= 2;
10247 unsigned char b1 = __b + 1;
10248 return vec_perm(__a, __a,
10249 (vector unsigned char)(__b, b1, __b, b1, __b, b1, __b, b1,
10250 __b, b1, __b, b1, __b, b1, __b, b1));
10251}
10252
10253static __inline__ vector pixel __ATTRS_o_ai vec_vsplth(vector pixel __a,
10254 unsigned char __b) {
10255 __b *= 2;
10256 unsigned char b1 = __b + 1;
10257 return vec_perm(__a, __a,
10258 (vector unsigned char)(__b, b1, __b, b1, __b, b1, __b, b1,
10259 __b, b1, __b, b1, __b, b1, __b, b1));
10260}
10261
10262/* vec_vspltw */
10263
10264#define __builtin_altivec_vspltw vec_vspltw
10265
10266static __inline__ vector int __ATTRS_o_ai vec_vspltw(vector int __a,
10267 unsigned char __b) {
10268 __b *= 4;
10269 unsigned char b1 = __b + 1, b2 = __b + 2, b3 = __b + 3;
10270 return vec_perm(__a, __a,
10271 (vector unsigned char)(__b, b1, b2, b3, __b, b1, b2, b3, __b,
10272 b1, b2, b3, __b, b1, b2, b3));
10273}
10274
10275static __inline__ vector unsigned int __ATTRS_o_ai
10276vec_vspltw(vector unsigned int __a, unsigned char __b) {
10277 __b *= 4;
10278 unsigned char b1 = __b + 1, b2 = __b + 2, b3 = __b + 3;
10279 return vec_perm(__a, __a,
10280 (vector unsigned char)(__b, b1, b2, b3, __b, b1, b2, b3, __b,
10281 b1, b2, b3, __b, b1, b2, b3));
10282}
10283
10284static __inline__ vector bool int __ATTRS_o_ai vec_vspltw(vector bool int __a,
10285 unsigned char __b) {
10286 __b *= 4;
10287 unsigned char b1 = __b + 1, b2 = __b + 2, b3 = __b + 3;
10288 return vec_perm(__a, __a,
10289 (vector unsigned char)(__b, b1, b2, b3, __b, b1, b2, b3, __b,
10290 b1, b2, b3, __b, b1, b2, b3));
10291}
10292
10293static __inline__ vector float __ATTRS_o_ai vec_vspltw(vector float __a,
10294 unsigned char __b) {
10295 __b *= 4;
10296 unsigned char b1 = __b + 1, b2 = __b + 2, b3 = __b + 3;
10297 return vec_perm(__a, __a,
10298 (vector unsigned char)(__b, b1, b2, b3, __b, b1, b2, b3, __b,
10299 b1, b2, b3, __b, b1, b2, b3));
10300}
10301
10302/* vec_splat_s8 */
10303
10304#define __builtin_altivec_vspltisb vec_splat_s8
10305
10306// FIXME: parameter should be treated as 5-bit signed literal
10307static __inline__ vector signed char __ATTRS_o_ai
10308vec_splat_s8(signed char __a) {
10309 return (vector signed char)(__a);
10310}
10311
10312/* vec_vspltisb */
10313
10314// FIXME: parameter should be treated as 5-bit signed literal
10315static __inline__ vector signed char __ATTRS_o_ai
10316vec_vspltisb(signed char __a) {
10317 return (vector signed char)(__a);
10318}
10319
10320/* vec_splat_s16 */
10321
10322#define __builtin_altivec_vspltish vec_splat_s16
10323
10324// FIXME: parameter should be treated as 5-bit signed literal
10325static __inline__ vector short __ATTRS_o_ai vec_splat_s16(signed char __a) {
10326 return (vector short)(__a);
10327}
10328
10329/* vec_vspltish */
10330
10331// FIXME: parameter should be treated as 5-bit signed literal
10332static __inline__ vector short __ATTRS_o_ai vec_vspltish(signed char __a) {
10333 return (vector short)(__a);
10334}
10335
10336/* vec_splat_s32 */
10337
10338#define __builtin_altivec_vspltisw vec_splat_s32
10339
10340// FIXME: parameter should be treated as 5-bit signed literal
10341static __inline__ vector int __ATTRS_o_ai vec_splat_s32(signed char __a) {
10342 return (vector int)(__a);
10343}
10344
10345/* vec_vspltisw */
10346
10347// FIXME: parameter should be treated as 5-bit signed literal
10348static __inline__ vector int __ATTRS_o_ai vec_vspltisw(signed char __a) {
10349 return (vector int)(__a);
10350}
10351
10352/* vec_splat_u8 */
10353
10354// FIXME: parameter should be treated as 5-bit signed literal
10355static __inline__ vector unsigned char __ATTRS_o_ai
10356vec_splat_u8(unsigned char __a) {
10357 return (vector unsigned char)(__a);
10358}
10359
10360/* vec_splat_u16 */
10361
10362// FIXME: parameter should be treated as 5-bit signed literal
10363static __inline__ vector unsigned short __ATTRS_o_ai
10364vec_splat_u16(signed char __a) {
10365 return (vector unsigned short)(__a);
10366}
10367
10368/* vec_splat_u32 */
10369
10370// FIXME: parameter should be treated as 5-bit signed literal
10371static __inline__ vector unsigned int __ATTRS_o_ai
10372vec_splat_u32(signed char __a) {
10373 return (vector unsigned int)(__a);
10374}
10375
10376/* vec_sr */
10377
10378// vec_sr does modulo arithmetic on __b first, so __b is allowed to be more
10379// than the length of __a.
10380static __inline__ vector unsigned char __ATTRS_o_ai
10381vec_sr(vector unsigned char __a, vector unsigned char __b) {
10382 return __a >>
10383 (__b % (vector unsigned char)(sizeof(unsigned char) * __CHAR_BIT__));
10384}
10385
10386static __inline__ vector signed char __ATTRS_o_ai
10387vec_sr(vector signed char __a, vector unsigned char __b) {
10388 return (vector signed char)vec_sr((vector unsigned char)__a, __b);
10389}
10390
10391static __inline__ vector unsigned short __ATTRS_o_ai
10392vec_sr(vector unsigned short __a, vector unsigned short __b) {
10393 return __a >>
10394 (__b % (vector unsigned short)(sizeof(unsigned short) * __CHAR_BIT__));
10395}
10396
10397static __inline__ vector short __ATTRS_o_ai vec_sr(vector short __a,
10398 vector unsigned short __b) {
10399 return (vector short)vec_sr((vector unsigned short)__a, __b);
10400}
10401
10402static __inline__ vector unsigned int __ATTRS_o_ai
10403vec_sr(vector unsigned int __a, vector unsigned int __b) {
10404 return __a >>
10405 (__b % (vector unsigned int)(sizeof(unsigned int) * __CHAR_BIT__));
10406}
10407
10408static __inline__ vector int __ATTRS_o_ai vec_sr(vector int __a,
10409 vector unsigned int __b) {
10410 return (vector int)vec_sr((vector unsigned int)__a, __b);
10411}
10412
10413#ifdef __POWER8_VECTOR__
10414static __inline__ vector unsigned long long __ATTRS_o_ai
10415vec_sr(vector unsigned long long __a, vector unsigned long long __b) {
10416 return __a >> (__b % (vector unsigned long long)(sizeof(unsigned long long) *
10417 __CHAR_BIT__));
10418}
10419
10420static __inline__ vector long long __ATTRS_o_ai
10421vec_sr(vector long long __a, vector unsigned long long __b) {
10422 return (vector long long)vec_sr((vector unsigned long long)__a, __b);
10423}
10424#elif defined(__VSX__)
10425static __inline__ vector unsigned long long __ATTRS_o_ai
10426vec_sr(vector unsigned long long __a, vector unsigned long long __b) {
10427 __b %= (vector unsigned long long)(sizeof(unsigned long long) * __CHAR_BIT__);
10428
10429 // Big endian element zero (the left doubleword) can be right shifted as-is.
10430 // However the shift amount must be in the right doubleword.
10431 // The other element needs to be swapped into the left doubleword and
10432 // shifted. Then the left doublewords of the two result vectors are merged.
10433 vector unsigned long long __swapshift =
10434 __builtin_shufflevector(__b, __b, 1, 0);
10435 vector unsigned long long __leftelt =
10436 (vector unsigned long long)__builtin_altivec_vsro(
10437 (vector signed int)__a, (vector signed int)__swapshift);
10438#ifdef __LITTLE_ENDIAN__
10439 __leftelt = (vector unsigned long long)__builtin_altivec_vsr(
10440 (vector signed int)__leftelt,
10441 (vector signed int)vec_vspltb((vector unsigned char)__swapshift, 0));
10442#else
10443 __leftelt = (vector unsigned long long)__builtin_altivec_vsr(
10444 (vector signed int)__leftelt,
10445 (vector signed int)vec_vspltb((vector unsigned char)__swapshift, 15));
10446#endif
10447 __a = __builtin_shufflevector(__a, __a, 1, 0);
10448 vector unsigned long long __rightelt =
10449 (vector unsigned long long)__builtin_altivec_vsro((vector signed int)__a,
10450 (vector signed int)__b);
10451#ifdef __LITTLE_ENDIAN__
10452 __rightelt = (vector unsigned long long)__builtin_altivec_vsr(
10453 (vector signed int)__rightelt,
10454 (vector signed int)vec_vspltb((vector unsigned char)__b, 0));
10455 return __builtin_shufflevector(__rightelt, __leftelt, 1, 3);
10456#else
10457 __rightelt = (vector unsigned long long)__builtin_altivec_vsr(
10458 (vector signed int)__rightelt,
10459 (vector signed int)vec_vspltb((vector unsigned char)__b, 15));
10460 return __builtin_shufflevector(__leftelt, __rightelt, 0, 2);
10461#endif
10462}
10463
10464static __inline__ vector long long __ATTRS_o_ai
10465vec_sr(vector long long __a, vector unsigned long long __b) {
10466 return (vector long long)vec_sr((vector unsigned long long)__a, __b);
10467}
10468#endif /* __VSX__ */
10469
10470/* vec_vsrb */
10471
10472#define __builtin_altivec_vsrb vec_vsrb
10473
10474static __inline__ vector signed char __ATTRS_o_ai
10475vec_vsrb(vector signed char __a, vector unsigned char __b) {
10476 return vec_sr(__a, __b);
10477}
10478
10479static __inline__ vector unsigned char __ATTRS_o_ai
10480vec_vsrb(vector unsigned char __a, vector unsigned char __b) {
10481 return vec_sr(__a, __b);
10482}
10483
10484/* vec_vsrh */
10485
10486#define __builtin_altivec_vsrh vec_vsrh
10487
10488static __inline__ vector short __ATTRS_o_ai
10489vec_vsrh(vector short __a, vector unsigned short __b) {
10490 return vec_sr(__a, __b);
10491}
10492
10493static __inline__ vector unsigned short __ATTRS_o_ai
10494vec_vsrh(vector unsigned short __a, vector unsigned short __b) {
10495 return vec_sr(__a, __b);
10496}
10497
10498/* vec_vsrw */
10499
10500#define __builtin_altivec_vsrw vec_vsrw
10501
10502static __inline__ vector int __ATTRS_o_ai vec_vsrw(vector int __a,
10503 vector unsigned int __b) {
10504 return vec_sr(__a, __b);
10505}
10506
10507static __inline__ vector unsigned int __ATTRS_o_ai
10508vec_vsrw(vector unsigned int __a, vector unsigned int __b) {
10509 return vec_sr(__a, __b);
10510}
10511
10512/* vec_sra */
10513
10514static __inline__ vector signed char __ATTRS_o_ai
10515vec_sra(vector signed char __a, vector unsigned char __b) {
10516 return (vector signed char)__builtin_altivec_vsrab((vector char)__a, __b);
10517}
10518
10519static __inline__ vector unsigned char __ATTRS_o_ai
10520vec_sra(vector unsigned char __a, vector unsigned char __b) {
10521 return (vector unsigned char)__builtin_altivec_vsrab((vector char)__a, __b);
10522}
10523
10524static __inline__ vector short __ATTRS_o_ai vec_sra(vector short __a,
10525 vector unsigned short __b) {
10526 return __builtin_altivec_vsrah(__a, (vector unsigned short)__b);
10527}
10528
10529static __inline__ vector unsigned short __ATTRS_o_ai
10530vec_sra(vector unsigned short __a, vector unsigned short __b) {
10531 return (vector unsigned short)__builtin_altivec_vsrah((vector short)__a, __b);
10532}
10533
10534static __inline__ vector int __ATTRS_o_ai vec_sra(vector int __a,
10535 vector unsigned int __b) {
10536 return __builtin_altivec_vsraw(__a, __b);
10537}
10538
10539static __inline__ vector unsigned int __ATTRS_o_ai
10540vec_sra(vector unsigned int __a, vector unsigned int __b) {
10541 return (vector unsigned int)__builtin_altivec_vsraw((vector int)__a, __b);
10542}
10543
10544#ifdef __POWER8_VECTOR__
10545static __inline__ vector signed long long __ATTRS_o_ai
10546vec_sra(vector signed long long __a, vector unsigned long long __b) {
10547 return __a >> __b;
10548}
10549
10550static __inline__ vector unsigned long long __ATTRS_o_ai
10551vec_sra(vector unsigned long long __a, vector unsigned long long __b) {
10552 return (vector unsigned long long)((vector signed long long)__a >> __b);
10553}
10554#elif defined(__VSX__)
10555static __inline__ vector signed long long __ATTRS_o_ai
10556vec_sra(vector signed long long __a, vector unsigned long long __b) {
10557 __b %= (vector unsigned long long)(sizeof(unsigned long long) * __CHAR_BIT__);
10558 return __a >> __b;
10559}
10560
10561static __inline__ vector unsigned long long __ATTRS_o_ai
10562vec_sra(vector unsigned long long __a, vector unsigned long long __b) {
10563 __b %= (vector unsigned long long)(sizeof(unsigned long long) * __CHAR_BIT__);
10564 return (vector unsigned long long)((vector signed long long)__a >> __b);
10565}
10566#endif /* __VSX__ */
10567
10568/* vec_vsrab */
10569
10570static __inline__ vector signed char __ATTRS_o_ai
10571vec_vsrab(vector signed char __a, vector unsigned char __b) {
10572 return (vector signed char)__builtin_altivec_vsrab((vector char)__a, __b);
10573}
10574
10575static __inline__ vector unsigned char __ATTRS_o_ai
10576vec_vsrab(vector unsigned char __a, vector unsigned char __b) {
10577 return (vector unsigned char)__builtin_altivec_vsrab((vector char)__a, __b);
10578}
10579
10580/* vec_vsrah */
10581
10582static __inline__ vector short __ATTRS_o_ai
10583vec_vsrah(vector short __a, vector unsigned short __b) {
10584 return __builtin_altivec_vsrah(__a, (vector unsigned short)__b);
10585}
10586
10587static __inline__ vector unsigned short __ATTRS_o_ai
10588vec_vsrah(vector unsigned short __a, vector unsigned short __b) {
10589 return (vector unsigned short)__builtin_altivec_vsrah((vector short)__a, __b);
10590}
10591
10592/* vec_vsraw */
10593
10594static __inline__ vector int __ATTRS_o_ai vec_vsraw(vector int __a,
10595 vector unsigned int __b) {
10596 return __builtin_altivec_vsraw(__a, __b);
10597}
10598
10599static __inline__ vector unsigned int __ATTRS_o_ai
10600vec_vsraw(vector unsigned int __a, vector unsigned int __b) {
10601 return (vector unsigned int)__builtin_altivec_vsraw((vector int)__a, __b);
10602}
10603
10604/* vec_srl */
10605
10606static __inline__ vector signed char __ATTRS_o_ai
10607vec_srl(vector signed char __a, vector unsigned char __b) {
10608 return (vector signed char)__builtin_altivec_vsr((vector int)__a,
10609 (vector int)__b);
10610}
10611
10612static __inline__ vector signed char __ATTRS_o_ai
10613vec_srl(vector signed char __a, vector unsigned short __b) {
10614 return (vector signed char)__builtin_altivec_vsr((vector int)__a,
10615 (vector int)__b);
10616}
10617
10618static __inline__ vector signed char __ATTRS_o_ai
10619vec_srl(vector signed char __a, vector unsigned int __b) {
10620 return (vector signed char)__builtin_altivec_vsr((vector int)__a,
10621 (vector int)__b);
10622}
10623
10624static __inline__ vector unsigned char __ATTRS_o_ai
10625vec_srl(vector unsigned char __a, vector unsigned char __b) {
10626 return (vector unsigned char)__builtin_altivec_vsr((vector int)__a,
10627 (vector int)__b);
10628}
10629
10630static __inline__ vector unsigned char __ATTRS_o_ai
10631vec_srl(vector unsigned char __a, vector unsigned short __b) {
10632 return (vector unsigned char)__builtin_altivec_vsr((vector int)__a,
10633 (vector int)__b);
10634}
10635
10636static __inline__ vector unsigned char __ATTRS_o_ai
10637vec_srl(vector unsigned char __a, vector unsigned int __b) {
10638 return (vector unsigned char)__builtin_altivec_vsr((vector int)__a,
10639 (vector int)__b);
10640}
10641
10642static __inline__ vector bool char __ATTRS_o_ai
10643vec_srl(vector bool char __a, vector unsigned char __b) {
10644 return (vector bool char)__builtin_altivec_vsr((vector int)__a,
10645 (vector int)__b);
10646}
10647
10648static __inline__ vector bool char __ATTRS_o_ai
10649vec_srl(vector bool char __a, vector unsigned short __b) {
10650 return (vector bool char)__builtin_altivec_vsr((vector int)__a,
10651 (vector int)__b);
10652}
10653
10654static __inline__ vector bool char __ATTRS_o_ai
10655vec_srl(vector bool char __a, vector unsigned int __b) {
10656 return (vector bool char)__builtin_altivec_vsr((vector int)__a,
10657 (vector int)__b);
10658}
10659
10660static __inline__ vector short __ATTRS_o_ai vec_srl(vector short __a,
10661 vector unsigned char __b) {
10662 return (vector short)__builtin_altivec_vsr((vector int)__a, (vector int)__b);
10663}
10664
10665static __inline__ vector short __ATTRS_o_ai vec_srl(vector short __a,
10666 vector unsigned short __b) {
10667 return (vector short)__builtin_altivec_vsr((vector int)__a, (vector int)__b);
10668}
10669
10670static __inline__ vector short __ATTRS_o_ai vec_srl(vector short __a,
10671 vector unsigned int __b) {
10672 return (vector short)__builtin_altivec_vsr((vector int)__a, (vector int)__b);
10673}
10674
10675static __inline__ vector unsigned short __ATTRS_o_ai
10676vec_srl(vector unsigned short __a, vector unsigned char __b) {
10677 return (vector unsigned short)__builtin_altivec_vsr((vector int)__a,
10678 (vector int)__b);
10679}
10680
10681static __inline__ vector unsigned short __ATTRS_o_ai
10682vec_srl(vector unsigned short __a, vector unsigned short __b) {
10683 return (vector unsigned short)__builtin_altivec_vsr((vector int)__a,
10684 (vector int)__b);
10685}
10686
10687static __inline__ vector unsigned short __ATTRS_o_ai
10688vec_srl(vector unsigned short __a, vector unsigned int __b) {
10689 return (vector unsigned short)__builtin_altivec_vsr((vector int)__a,
10690 (vector int)__b);
10691}
10692
10693static __inline__ vector bool short __ATTRS_o_ai
10694vec_srl(vector bool short __a, vector unsigned char __b) {
10695 return (vector bool short)__builtin_altivec_vsr((vector int)__a,
10696 (vector int)__b);
10697}
10698
10699static __inline__ vector bool short __ATTRS_o_ai
10700vec_srl(vector bool short __a, vector unsigned short __b) {
10701 return (vector bool short)__builtin_altivec_vsr((vector int)__a,
10702 (vector int)__b);
10703}
10704
10705static __inline__ vector bool short __ATTRS_o_ai
10706vec_srl(vector bool short __a, vector unsigned int __b) {
10707 return (vector bool short)__builtin_altivec_vsr((vector int)__a,
10708 (vector int)__b);
10709}
10710
10711static __inline__ vector pixel __ATTRS_o_ai vec_srl(vector pixel __a,
10712 vector unsigned char __b) {
10713 return (vector pixel)__builtin_altivec_vsr((vector int)__a, (vector int)__b);
10714}
10715
10716static __inline__ vector pixel __ATTRS_o_ai vec_srl(vector pixel __a,
10717 vector unsigned short __b) {
10718 return (vector pixel)__builtin_altivec_vsr((vector int)__a, (vector int)__b);
10719}
10720
10721static __inline__ vector pixel __ATTRS_o_ai vec_srl(vector pixel __a,
10722 vector unsigned int __b) {
10723 return (vector pixel)__builtin_altivec_vsr((vector int)__a, (vector int)__b);
10724}
10725
10726static __inline__ vector int __ATTRS_o_ai vec_srl(vector int __a,
10727 vector unsigned char __b) {
10728 return (vector int)__builtin_altivec_vsr(__a, (vector int)__b);
10729}
10730
10731static __inline__ vector int __ATTRS_o_ai vec_srl(vector int __a,
10732 vector unsigned short __b) {
10733 return (vector int)__builtin_altivec_vsr(__a, (vector int)__b);
10734}
10735
10736static __inline__ vector int __ATTRS_o_ai vec_srl(vector int __a,
10737 vector unsigned int __b) {
10738 return (vector int)__builtin_altivec_vsr(__a, (vector int)__b);
10739}
10740
10741static __inline__ vector unsigned int __ATTRS_o_ai
10742vec_srl(vector unsigned int __a, vector unsigned char __b) {
10743 return (vector unsigned int)__builtin_altivec_vsr((vector int)__a,
10744 (vector int)__b);
10745}
10746
10747static __inline__ vector unsigned int __ATTRS_o_ai
10748vec_srl(vector unsigned int __a, vector unsigned short __b) {
10749 return (vector unsigned int)__builtin_altivec_vsr((vector int)__a,
10750 (vector int)__b);
10751}
10752
10753static __inline__ vector unsigned int __ATTRS_o_ai
10754vec_srl(vector unsigned int __a, vector unsigned int __b) {
10755 return (vector unsigned int)__builtin_altivec_vsr((vector int)__a,
10756 (vector int)__b);
10757}
10758
10759static __inline__ vector bool int __ATTRS_o_ai
10760vec_srl(vector bool int __a, vector unsigned char __b) {
10761 return (vector bool int)__builtin_altivec_vsr((vector int)__a,
10762 (vector int)__b);
10763}
10764
10765static __inline__ vector bool int __ATTRS_o_ai
10766vec_srl(vector bool int __a, vector unsigned short __b) {
10767 return (vector bool int)__builtin_altivec_vsr((vector int)__a,
10768 (vector int)__b);
10769}
10770
10771static __inline__ vector bool int __ATTRS_o_ai
10772vec_srl(vector bool int __a, vector unsigned int __b) {
10773 return (vector bool int)__builtin_altivec_vsr((vector int)__a,
10774 (vector int)__b);
10775}
10776
10777#ifdef __VSX__
10778static __inline__ vector signed long long __ATTRS_o_ai
10779vec_srl(vector signed long long __a, vector unsigned char __b) {
10780 return (vector signed long long)__builtin_altivec_vsr((vector int)__a,
10781 (vector int)__b);
10782}
10783
10784static __inline__ vector unsigned long long __ATTRS_o_ai
10785vec_srl(vector unsigned long long __a, vector unsigned char __b) {
10786 return (vector unsigned long long)__builtin_altivec_vsr((vector int)__a,
10787 (vector int)__b);
10788}
10789#endif
10790
10791/* vec_vsr */
10792
10793static __inline__ vector signed char __ATTRS_o_ai
10794vec_vsr(vector signed char __a, vector unsigned char __b) {
10795 return (vector signed char)__builtin_altivec_vsr((vector int)__a,
10796 (vector int)__b);
10797}
10798
10799static __inline__ vector signed char __ATTRS_o_ai
10800vec_vsr(vector signed char __a, vector unsigned short __b) {
10801 return (vector signed char)__builtin_altivec_vsr((vector int)__a,
10802 (vector int)__b);
10803}
10804
10805static __inline__ vector signed char __ATTRS_o_ai
10806vec_vsr(vector signed char __a, vector unsigned int __b) {
10807 return (vector signed char)__builtin_altivec_vsr((vector int)__a,
10808 (vector int)__b);
10809}
10810
10811static __inline__ vector unsigned char __ATTRS_o_ai
10812vec_vsr(vector unsigned char __a, vector unsigned char __b) {
10813 return (vector unsigned char)__builtin_altivec_vsr((vector int)__a,
10814 (vector int)__b);
10815}
10816
10817static __inline__ vector unsigned char __ATTRS_o_ai
10818vec_vsr(vector unsigned char __a, vector unsigned short __b) {
10819 return (vector unsigned char)__builtin_altivec_vsr((vector int)__a,
10820 (vector int)__b);
10821}
10822
10823static __inline__ vector unsigned char __ATTRS_o_ai
10824vec_vsr(vector unsigned char __a, vector unsigned int __b) {
10825 return (vector unsigned char)__builtin_altivec_vsr((vector int)__a,
10826 (vector int)__b);
10827}
10828
10829static __inline__ vector bool char __ATTRS_o_ai
10830vec_vsr(vector bool char __a, vector unsigned char __b) {
10831 return (vector bool char)__builtin_altivec_vsr((vector int)__a,
10832 (vector int)__b);
10833}
10834
10835static __inline__ vector bool char __ATTRS_o_ai
10836vec_vsr(vector bool char __a, vector unsigned short __b) {
10837 return (vector bool char)__builtin_altivec_vsr((vector int)__a,
10838 (vector int)__b);
10839}
10840
10841static __inline__ vector bool char __ATTRS_o_ai
10842vec_vsr(vector bool char __a, vector unsigned int __b) {
10843 return (vector bool char)__builtin_altivec_vsr((vector int)__a,
10844 (vector int)__b);
10845}
10846
10847static __inline__ vector short __ATTRS_o_ai vec_vsr(vector short __a,
10848 vector unsigned char __b) {
10849 return (vector short)__builtin_altivec_vsr((vector int)__a, (vector int)__b);
10850}
10851
10852static __inline__ vector short __ATTRS_o_ai vec_vsr(vector short __a,
10853 vector unsigned short __b) {
10854 return (vector short)__builtin_altivec_vsr((vector int)__a, (vector int)__b);
10855}
10856
10857static __inline__ vector short __ATTRS_o_ai vec_vsr(vector short __a,
10858 vector unsigned int __b) {
10859 return (vector short)__builtin_altivec_vsr((vector int)__a, (vector int)__b);
10860}
10861
10862static __inline__ vector unsigned short __ATTRS_o_ai
10863vec_vsr(vector unsigned short __a, vector unsigned char __b) {
10864 return (vector unsigned short)__builtin_altivec_vsr((vector int)__a,
10865 (vector int)__b);
10866}
10867
10868static __inline__ vector unsigned short __ATTRS_o_ai
10869vec_vsr(vector unsigned short __a, vector unsigned short __b) {
10870 return (vector unsigned short)__builtin_altivec_vsr((vector int)__a,
10871 (vector int)__b);
10872}
10873
10874static __inline__ vector unsigned short __ATTRS_o_ai
10875vec_vsr(vector unsigned short __a, vector unsigned int __b) {
10876 return (vector unsigned short)__builtin_altivec_vsr((vector int)__a,
10877 (vector int)__b);
10878}
10879
10880static __inline__ vector bool short __ATTRS_o_ai
10881vec_vsr(vector bool short __a, vector unsigned char __b) {
10882 return (vector bool short)__builtin_altivec_vsr((vector int)__a,
10883 (vector int)__b);
10884}
10885
10886static __inline__ vector bool short __ATTRS_o_ai
10887vec_vsr(vector bool short __a, vector unsigned short __b) {
10888 return (vector bool short)__builtin_altivec_vsr((vector int)__a,
10889 (vector int)__b);
10890}
10891
10892static __inline__ vector bool short __ATTRS_o_ai
10893vec_vsr(vector bool short __a, vector unsigned int __b) {
10894 return (vector bool short)__builtin_altivec_vsr((vector int)__a,
10895 (vector int)__b);
10896}
10897
10898static __inline__ vector pixel __ATTRS_o_ai vec_vsr(vector pixel __a,
10899 vector unsigned char __b) {
10900 return (vector pixel)__builtin_altivec_vsr((vector int)__a, (vector int)__b);
10901}
10902
10903static __inline__ vector pixel __ATTRS_o_ai vec_vsr(vector pixel __a,
10904 vector unsigned short __b) {
10905 return (vector pixel)__builtin_altivec_vsr((vector int)__a, (vector int)__b);
10906}
10907
10908static __inline__ vector pixel __ATTRS_o_ai vec_vsr(vector pixel __a,
10909 vector unsigned int __b) {
10910 return (vector pixel)__builtin_altivec_vsr((vector int)__a, (vector int)__b);
10911}
10912
10913static __inline__ vector int __ATTRS_o_ai vec_vsr(vector int __a,
10914 vector unsigned char __b) {
10915 return (vector int)__builtin_altivec_vsr(__a, (vector int)__b);
10916}
10917
10918static __inline__ vector int __ATTRS_o_ai vec_vsr(vector int __a,
10919 vector unsigned short __b) {
10920 return (vector int)__builtin_altivec_vsr(__a, (vector int)__b);
10921}
10922
10923static __inline__ vector int __ATTRS_o_ai vec_vsr(vector int __a,
10924 vector unsigned int __b) {
10925 return (vector int)__builtin_altivec_vsr(__a, (vector int)__b);
10926}
10927
10928static __inline__ vector unsigned int __ATTRS_o_ai
10929vec_vsr(vector unsigned int __a, vector unsigned char __b) {
10930 return (vector unsigned int)__builtin_altivec_vsr((vector int)__a,
10931 (vector int)__b);
10932}
10933
10934static __inline__ vector unsigned int __ATTRS_o_ai
10935vec_vsr(vector unsigned int __a, vector unsigned short __b) {
10936 return (vector unsigned int)__builtin_altivec_vsr((vector int)__a,
10937 (vector int)__b);
10938}
10939
10940static __inline__ vector unsigned int __ATTRS_o_ai
10941vec_vsr(vector unsigned int __a, vector unsigned int __b) {
10942 return (vector unsigned int)__builtin_altivec_vsr((vector int)__a,
10943 (vector int)__b);
10944}
10945
10946static __inline__ vector bool int __ATTRS_o_ai
10947vec_vsr(vector bool int __a, vector unsigned char __b) {
10948 return (vector bool int)__builtin_altivec_vsr((vector int)__a,
10949 (vector int)__b);
10950}
10951
10952static __inline__ vector bool int __ATTRS_o_ai
10953vec_vsr(vector bool int __a, vector unsigned short __b) {
10954 return (vector bool int)__builtin_altivec_vsr((vector int)__a,
10955 (vector int)__b);
10956}
10957
10958static __inline__ vector bool int __ATTRS_o_ai
10959vec_vsr(vector bool int __a, vector unsigned int __b) {
10960 return (vector bool int)__builtin_altivec_vsr((vector int)__a,
10961 (vector int)__b);
10962}
10963
10964/* vec_sro */
10965
10966static __inline__ vector signed char __ATTRS_o_ai
10967vec_sro(vector signed char __a, vector signed char __b) {
10968 return (vector signed char)__builtin_altivec_vsro((vector int)__a,
10969 (vector int)__b);
10970}
10971
10972static __inline__ vector signed char __ATTRS_o_ai
10973vec_sro(vector signed char __a, vector unsigned char __b) {
10974 return (vector signed char)__builtin_altivec_vsro((vector int)__a,
10975 (vector int)__b);
10976}
10977
10978static __inline__ vector unsigned char __ATTRS_o_ai
10979vec_sro(vector unsigned char __a, vector signed char __b) {
10980 return (vector unsigned char)__builtin_altivec_vsro((vector int)__a,
10981 (vector int)__b);
10982}
10983
10984static __inline__ vector unsigned char __ATTRS_o_ai
10985vec_sro(vector unsigned char __a, vector unsigned char __b) {
10986 return (vector unsigned char)__builtin_altivec_vsro((vector int)__a,
10987 (vector int)__b);
10988}
10989
10990static __inline__ vector short __ATTRS_o_ai vec_sro(vector short __a,
10991 vector signed char __b) {
10992 return (vector short)__builtin_altivec_vsro((vector int)__a, (vector int)__b);
10993}
10994
10995static __inline__ vector short __ATTRS_o_ai vec_sro(vector short __a,
10996 vector unsigned char __b) {
10997 return (vector short)__builtin_altivec_vsro((vector int)__a, (vector int)__b);
10998}
10999
11000static __inline__ vector unsigned short __ATTRS_o_ai
11001vec_sro(vector unsigned short __a, vector signed char __b) {
11002 return (vector unsigned short)__builtin_altivec_vsro((vector int)__a,
11003 (vector int)__b);
11004}
11005
11006static __inline__ vector unsigned short __ATTRS_o_ai
11007vec_sro(vector unsigned short __a, vector unsigned char __b) {
11008 return (vector unsigned short)__builtin_altivec_vsro((vector int)__a,
11009 (vector int)__b);
11010}
11011
11012static __inline__ vector pixel __ATTRS_o_ai vec_sro(vector pixel __a,
11013 vector signed char __b) {
11014 return (vector pixel)__builtin_altivec_vsro((vector int)__a, (vector int)__b);
11015}
11016
11017static __inline__ vector pixel __ATTRS_o_ai vec_sro(vector pixel __a,
11018 vector unsigned char __b) {
11019 return (vector pixel)__builtin_altivec_vsro((vector int)__a, (vector int)__b);
11020}
11021
11022static __inline__ vector int __ATTRS_o_ai vec_sro(vector int __a,
11023 vector signed char __b) {
11024 return (vector int)__builtin_altivec_vsro(__a, (vector int)__b);
11025}
11026
11027static __inline__ vector int __ATTRS_o_ai vec_sro(vector int __a,
11028 vector unsigned char __b) {
11029 return (vector int)__builtin_altivec_vsro(__a, (vector int)__b);
11030}
11031
11032static __inline__ vector unsigned int __ATTRS_o_ai
11033vec_sro(vector unsigned int __a, vector signed char __b) {
11034 return (vector unsigned int)__builtin_altivec_vsro((vector int)__a,
11035 (vector int)__b);
11036}
11037
11038static __inline__ vector unsigned int __ATTRS_o_ai
11039vec_sro(vector unsigned int __a, vector unsigned char __b) {
11040 return (vector unsigned int)__builtin_altivec_vsro((vector int)__a,
11041 (vector int)__b);
11042}
11043
11044static __inline__ vector float __ATTRS_o_ai vec_sro(vector float __a,
11045 vector signed char __b) {
11046 return (vector float)__builtin_altivec_vsro((vector int)__a, (vector int)__b);
11047}
11048
11049static __inline__ vector float __ATTRS_o_ai vec_sro(vector float __a,
11050 vector unsigned char __b) {
11051 return (vector float)__builtin_altivec_vsro((vector int)__a, (vector int)__b);
11052}
11053
11054#ifdef __VSX__
11055static __inline__ vector signed long long __ATTRS_o_ai
11056vec_sro(vector signed long long __a, vector signed char __b) {
11057 return (vector signed long long)__builtin_altivec_vsro((vector int)__a,
11058 (vector int)__b);
11059}
11060
11061static __inline__ vector signed long long __ATTRS_o_ai
11062vec_sro(vector signed long long __a, vector unsigned char __b) {
11063 return (vector signed long long)__builtin_altivec_vsro((vector int)__a,
11064 (vector int)__b);
11065}
11066
11067static __inline__ vector unsigned long long __ATTRS_o_ai
11068vec_sro(vector unsigned long long __a, vector signed char __b) {
11069 return (vector unsigned long long)__builtin_altivec_vsro((vector int)__a,
11070 (vector int)__b);
11071}
11072
11073static __inline__ vector unsigned long long __ATTRS_o_ai
11074vec_sro(vector unsigned long long __a, vector unsigned char __b) {
11075 return (vector unsigned long long)__builtin_altivec_vsro((vector int)__a,
11076 (vector int)__b);
11077}
11078#endif
11079
11080/* vec_vsro */
11081
11082static __inline__ vector signed char __ATTRS_o_ai
11083vec_vsro(vector signed char __a, vector signed char __b) {
11084 return (vector signed char)__builtin_altivec_vsro((vector int)__a,
11085 (vector int)__b);
11086}
11087
11088static __inline__ vector signed char __ATTRS_o_ai
11089vec_vsro(vector signed char __a, vector unsigned char __b) {
11090 return (vector signed char)__builtin_altivec_vsro((vector int)__a,
11091 (vector int)__b);
11092}
11093
11094static __inline__ vector unsigned char __ATTRS_o_ai
11095vec_vsro(vector unsigned char __a, vector signed char __b) {
11096 return (vector unsigned char)__builtin_altivec_vsro((vector int)__a,
11097 (vector int)__b);
11098}
11099
11100static __inline__ vector unsigned char __ATTRS_o_ai
11101vec_vsro(vector unsigned char __a, vector unsigned char __b) {
11102 return (vector unsigned char)__builtin_altivec_vsro((vector int)__a,
11103 (vector int)__b);
11104}
11105
11106static __inline__ vector short __ATTRS_o_ai vec_vsro(vector short __a,
11107 vector signed char __b) {
11108 return (vector short)__builtin_altivec_vsro((vector int)__a, (vector int)__b);
11109}
11110
11111static __inline__ vector short __ATTRS_o_ai vec_vsro(vector short __a,
11112 vector unsigned char __b) {
11113 return (vector short)__builtin_altivec_vsro((vector int)__a, (vector int)__b);
11114}
11115
11116static __inline__ vector unsigned short __ATTRS_o_ai
11117vec_vsro(vector unsigned short __a, vector signed char __b) {
11118 return (vector unsigned short)__builtin_altivec_vsro((vector int)__a,
11119 (vector int)__b);
11120}
11121
11122static __inline__ vector unsigned short __ATTRS_o_ai
11123vec_vsro(vector unsigned short __a, vector unsigned char __b) {
11124 return (vector unsigned short)__builtin_altivec_vsro((vector int)__a,
11125 (vector int)__b);
11126}
11127
11128static __inline__ vector pixel __ATTRS_o_ai vec_vsro(vector pixel __a,
11129 vector signed char __b) {
11130 return (vector pixel)__builtin_altivec_vsro((vector int)__a, (vector int)__b);
11131}
11132
11133static __inline__ vector pixel __ATTRS_o_ai vec_vsro(vector pixel __a,
11134 vector unsigned char __b) {
11135 return (vector pixel)__builtin_altivec_vsro((vector int)__a, (vector int)__b);
11136}
11137
11138static __inline__ vector int __ATTRS_o_ai vec_vsro(vector int __a,
11139 vector signed char __b) {
11140 return (vector int)__builtin_altivec_vsro(__a, (vector int)__b);
11141}
11142
11143static __inline__ vector int __ATTRS_o_ai vec_vsro(vector int __a,
11144 vector unsigned char __b) {
11145 return (vector int)__builtin_altivec_vsro(__a, (vector int)__b);
11146}
11147
11148static __inline__ vector unsigned int __ATTRS_o_ai
11149vec_vsro(vector unsigned int __a, vector signed char __b) {
11150 return (vector unsigned int)__builtin_altivec_vsro((vector int)__a,
11151 (vector int)__b);
11152}
11153
11154static __inline__ vector unsigned int __ATTRS_o_ai
11155vec_vsro(vector unsigned int __a, vector unsigned char __b) {
11156 return (vector unsigned int)__builtin_altivec_vsro((vector int)__a,
11157 (vector int)__b);
11158}
11159
11160static __inline__ vector float __ATTRS_o_ai vec_vsro(vector float __a,
11161 vector signed char __b) {
11162 return (vector float)__builtin_altivec_vsro((vector int)__a, (vector int)__b);
11163}
11164
11165static __inline__ vector float __ATTRS_o_ai vec_vsro(vector float __a,
11166 vector unsigned char __b) {
11167 return (vector float)__builtin_altivec_vsro((vector int)__a, (vector int)__b);
11168}
11169
11170/* vec_st */
11171
11172static __inline__ void __ATTRS_o_ai vec_st(vector signed char __a, long __b,
11173 vector signed char *__c) {
11174 __builtin_altivec_stvx((vector int)__a, __b, __c);
11175}
11176
11177static __inline__ void __ATTRS_o_ai vec_st(vector signed char __a, long __b,
11178 signed char *__c) {
11179 __builtin_altivec_stvx((vector int)__a, __b, __c);
11180}
11181
11182static __inline__ void __ATTRS_o_ai vec_st(vector unsigned char __a, long __b,
11183 vector unsigned char *__c) {
11184 __builtin_altivec_stvx((vector int)__a, __b, __c);
11185}
11186
11187static __inline__ void __ATTRS_o_ai vec_st(vector unsigned char __a, long __b,
11188 unsigned char *__c) {
11189 __builtin_altivec_stvx((vector int)__a, __b, __c);
11190}
11191
11192static __inline__ void __ATTRS_o_ai vec_st(vector bool char __a, long __b,
11193 signed char *__c) {
11194 __builtin_altivec_stvx((vector int)__a, __b, __c);
11195}
11196
11197static __inline__ void __ATTRS_o_ai vec_st(vector bool char __a, long __b,
11198 unsigned char *__c) {
11199 __builtin_altivec_stvx((vector int)__a, __b, __c);
11200}
11201
11202static __inline__ void __ATTRS_o_ai vec_st(vector bool char __a, long __b,
11203 vector bool char *__c) {
11204 __builtin_altivec_stvx((vector int)__a, __b, __c);
11205}
11206
11207static __inline__ void __ATTRS_o_ai vec_st(vector short __a, long __b,
11208 vector short *__c) {
11209 __builtin_altivec_stvx((vector int)__a, __b, __c);
11210}
11211
11212static __inline__ void __ATTRS_o_ai vec_st(vector short __a, long __b,
11213 short *__c) {
11214 __builtin_altivec_stvx((vector int)__a, __b, __c);
11215}
11216
11217static __inline__ void __ATTRS_o_ai vec_st(vector unsigned short __a, long __b,
11218 vector unsigned short *__c) {
11219 __builtin_altivec_stvx((vector int)__a, __b, __c);
11220}
11221
11222static __inline__ void __ATTRS_o_ai vec_st(vector unsigned short __a, long __b,
11223 unsigned short *__c) {
11224 __builtin_altivec_stvx((vector int)__a, __b, __c);
11225}
11226
11227static __inline__ void __ATTRS_o_ai vec_st(vector bool short __a, long __b,
11228 short *__c) {
11229 __builtin_altivec_stvx((vector int)__a, __b, __c);
11230}
11231
11232static __inline__ void __ATTRS_o_ai vec_st(vector bool short __a, long __b,
11233 unsigned short *__c) {
11234 __builtin_altivec_stvx((vector int)__a, __b, __c);
11235}
11236
11237static __inline__ void __ATTRS_o_ai vec_st(vector bool short __a, long __b,
11238 vector bool short *__c) {
11239 __builtin_altivec_stvx((vector int)__a, __b, __c);
11240}
11241
11242static __inline__ void __ATTRS_o_ai vec_st(vector pixel __a, long __b,
11243 short *__c) {
11244 __builtin_altivec_stvx((vector int)__a, __b, __c);
11245}
11246
11247static __inline__ void __ATTRS_o_ai vec_st(vector pixel __a, long __b,
11248 unsigned short *__c) {
11249 __builtin_altivec_stvx((vector int)__a, __b, __c);
11250}
11251
11252static __inline__ void __ATTRS_o_ai vec_st(vector pixel __a, long __b,
11253 vector pixel *__c) {
11254 __builtin_altivec_stvx((vector int)__a, __b, __c);
11255}
11256
11257static __inline__ void __ATTRS_o_ai vec_st(vector int __a, long __b,
11258 vector int *__c) {
11259 __builtin_altivec_stvx(__a, __b, __c);
11260}
11261
11262static __inline__ void __ATTRS_o_ai vec_st(vector int __a, long __b, int *__c) {
11263 __builtin_altivec_stvx(__a, __b, __c);
11264}
11265
11266static __inline__ void __ATTRS_o_ai vec_st(vector unsigned int __a, long __b,
11267 vector unsigned int *__c) {
11268 __builtin_altivec_stvx((vector int)__a, __b, __c);
11269}
11270
11271static __inline__ void __ATTRS_o_ai vec_st(vector unsigned int __a, long __b,
11272 unsigned int *__c) {
11273 __builtin_altivec_stvx((vector int)__a, __b, __c);
11274}
11275
11276static __inline__ void __ATTRS_o_ai vec_st(vector bool int __a, long __b,
11277 int *__c) {
11278 __builtin_altivec_stvx((vector int)__a, __b, __c);
11279}
11280
11281static __inline__ void __ATTRS_o_ai vec_st(vector bool int __a, long __b,
11282 unsigned int *__c) {
11283 __builtin_altivec_stvx((vector int)__a, __b, __c);
11284}
11285
11286static __inline__ void __ATTRS_o_ai vec_st(vector bool int __a, long __b,
11287 vector bool int *__c) {
11288 __builtin_altivec_stvx((vector int)__a, __b, __c);
11289}
11290
11291static __inline__ void __ATTRS_o_ai vec_st(vector float __a, long __b,
11292 vector float *__c) {
11293 __builtin_altivec_stvx((vector int)__a, __b, __c);
11294}
11295
11296static __inline__ void __ATTRS_o_ai vec_st(vector float __a, long __b,
11297 float *__c) {
11298 __builtin_altivec_stvx((vector int)__a, __b, __c);
11299}
11300
11301/* vec_stvx */
11302
11303static __inline__ void __ATTRS_o_ai vec_stvx(vector signed char __a, long __b,
11304 vector signed char *__c) {
11305 __builtin_altivec_stvx((vector int)__a, __b, __c);
11306}
11307
11308static __inline__ void __ATTRS_o_ai vec_stvx(vector signed char __a, long __b,
11309 signed char *__c) {
11310 __builtin_altivec_stvx((vector int)__a, __b, __c);
11311}
11312
11313static __inline__ void __ATTRS_o_ai vec_stvx(vector unsigned char __a, long __b,
11314 vector unsigned char *__c) {
11315 __builtin_altivec_stvx((vector int)__a, __b, __c);
11316}
11317
11318static __inline__ void __ATTRS_o_ai vec_stvx(vector unsigned char __a, long __b,
11319 unsigned char *__c) {
11320 __builtin_altivec_stvx((vector int)__a, __b, __c);
11321}
11322
11323static __inline__ void __ATTRS_o_ai vec_stvx(vector bool char __a, long __b,
11324 signed char *__c) {
11325 __builtin_altivec_stvx((vector int)__a, __b, __c);
11326}
11327
11328static __inline__ void __ATTRS_o_ai vec_stvx(vector bool char __a, long __b,
11329 unsigned char *__c) {
11330 __builtin_altivec_stvx((vector int)__a, __b, __c);
11331}
11332
11333static __inline__ void __ATTRS_o_ai vec_stvx(vector bool char __a, long __b,
11334 vector bool char *__c) {
11335 __builtin_altivec_stvx((vector int)__a, __b, __c);
11336}
11337
11338static __inline__ void __ATTRS_o_ai vec_stvx(vector short __a, long __b,
11339 vector short *__c) {
11340 __builtin_altivec_stvx((vector int)__a, __b, __c);
11341}
11342
11343static __inline__ void __ATTRS_o_ai vec_stvx(vector short __a, long __b,
11344 short *__c) {
11345 __builtin_altivec_stvx((vector int)__a, __b, __c);
11346}
11347
11348static __inline__ void __ATTRS_o_ai vec_stvx(vector unsigned short __a, long __b,
11349 vector unsigned short *__c) {
11350 __builtin_altivec_stvx((vector int)__a, __b, __c);
11351}
11352
11353static __inline__ void __ATTRS_o_ai vec_stvx(vector unsigned short __a, long __b,
11354 unsigned short *__c) {
11355 __builtin_altivec_stvx((vector int)__a, __b, __c);
11356}
11357
11358static __inline__ void __ATTRS_o_ai vec_stvx(vector bool short __a, long __b,
11359 short *__c) {
11360 __builtin_altivec_stvx((vector int)__a, __b, __c);
11361}
11362
11363static __inline__ void __ATTRS_o_ai vec_stvx(vector bool short __a, long __b,
11364 unsigned short *__c) {
11365 __builtin_altivec_stvx((vector int)__a, __b, __c);
11366}
11367
11368static __inline__ void __ATTRS_o_ai vec_stvx(vector bool short __a, long __b,
11369 vector bool short *__c) {
11370 __builtin_altivec_stvx((vector int)__a, __b, __c);
11371}
11372
11373static __inline__ void __ATTRS_o_ai vec_stvx(vector pixel __a, long __b,
11374 short *__c) {
11375 __builtin_altivec_stvx((vector int)__a, __b, __c);
11376}
11377
11378static __inline__ void __ATTRS_o_ai vec_stvx(vector pixel __a, long __b,
11379 unsigned short *__c) {
11380 __builtin_altivec_stvx((vector int)__a, __b, __c);
11381}
11382
11383static __inline__ void __ATTRS_o_ai vec_stvx(vector pixel __a, long __b,
11384 vector pixel *__c) {
11385 __builtin_altivec_stvx((vector int)__a, __b, __c);
11386}
11387
11388static __inline__ void __ATTRS_o_ai vec_stvx(vector int __a, long __b,
11389 vector int *__c) {
11390 __builtin_altivec_stvx(__a, __b, __c);
11391}
11392
11393static __inline__ void __ATTRS_o_ai vec_stvx(vector int __a, long __b,
11394 int *__c) {
11395 __builtin_altivec_stvx(__a, __b, __c);
11396}
11397
11398static __inline__ void __ATTRS_o_ai vec_stvx(vector unsigned int __a, long __b,
11399 vector unsigned int *__c) {
11400 __builtin_altivec_stvx((vector int)__a, __b, __c);
11401}
11402
11403static __inline__ void __ATTRS_o_ai vec_stvx(vector unsigned int __a, long __b,
11404 unsigned int *__c) {
11405 __builtin_altivec_stvx((vector int)__a, __b, __c);
11406}
11407
11408static __inline__ void __ATTRS_o_ai vec_stvx(vector bool int __a, long __b,
11409 int *__c) {
11410 __builtin_altivec_stvx((vector int)__a, __b, __c);
11411}
11412
11413static __inline__ void __ATTRS_o_ai vec_stvx(vector bool int __a, long __b,
11414 unsigned int *__c) {
11415 __builtin_altivec_stvx((vector int)__a, __b, __c);
11416}
11417
11418static __inline__ void __ATTRS_o_ai vec_stvx(vector bool int __a, long __b,
11419 vector bool int *__c) {
11420 __builtin_altivec_stvx((vector int)__a, __b, __c);
11421}
11422
11423static __inline__ void __ATTRS_o_ai vec_stvx(vector float __a, long __b,
11424 vector float *__c) {
11425 __builtin_altivec_stvx((vector int)__a, __b, __c);
11426}
11427
11428static __inline__ void __ATTRS_o_ai vec_stvx(vector float __a, long __b,
11429 float *__c) {
11430 __builtin_altivec_stvx((vector int)__a, __b, __c);
11431}
11432
11433/* vec_ste */
11434
11435static __inline__ void __ATTRS_o_ai vec_ste(vector signed char __a, long __b,
11436 signed char *__c) {
11437 __builtin_altivec_stvebx((vector char)__a, __b, __c);
11438}
11439
11440static __inline__ void __ATTRS_o_ai vec_ste(vector unsigned char __a, long __b,
11441 unsigned char *__c) {
11442 __builtin_altivec_stvebx((vector char)__a, __b, __c);
11443}
11444
11445static __inline__ void __ATTRS_o_ai vec_ste(vector bool char __a, long __b,
11446 signed char *__c) {
11447 __builtin_altivec_stvebx((vector char)__a, __b, __c);
11448}
11449
11450static __inline__ void __ATTRS_o_ai vec_ste(vector bool char __a, long __b,
11451 unsigned char *__c) {
11452 __builtin_altivec_stvebx((vector char)__a, __b, __c);
11453}
11454
11455static __inline__ void __ATTRS_o_ai vec_ste(vector short __a, long __b,
11456 short *__c) {
11457 __builtin_altivec_stvehx(__a, __b, __c);
11458}
11459
11460static __inline__ void __ATTRS_o_ai vec_ste(vector unsigned short __a, long __b,
11461 unsigned short *__c) {
11462 __builtin_altivec_stvehx((vector short)__a, __b, __c);
11463}
11464
11465static __inline__ void __ATTRS_o_ai vec_ste(vector bool short __a, long __b,
11466 short *__c) {
11467 __builtin_altivec_stvehx((vector short)__a, __b, __c);
11468}
11469
11470static __inline__ void __ATTRS_o_ai vec_ste(vector bool short __a, long __b,
11471 unsigned short *__c) {
11472 __builtin_altivec_stvehx((vector short)__a, __b, __c);
11473}
11474
11475static __inline__ void __ATTRS_o_ai vec_ste(vector pixel __a, long __b,
11476 short *__c) {
11477 __builtin_altivec_stvehx((vector short)__a, __b, __c);
11478}
11479
11480static __inline__ void __ATTRS_o_ai vec_ste(vector pixel __a, long __b,
11481 unsigned short *__c) {
11482 __builtin_altivec_stvehx((vector short)__a, __b, __c);
11483}
11484
11485static __inline__ void __ATTRS_o_ai vec_ste(vector int __a, long __b, int *__c) {
11486 __builtin_altivec_stvewx(__a, __b, __c);
11487}
11488
11489static __inline__ void __ATTRS_o_ai vec_ste(vector unsigned int __a, long __b,
11490 unsigned int *__c) {
11491 __builtin_altivec_stvewx((vector int)__a, __b, __c);
11492}
11493
11494static __inline__ void __ATTRS_o_ai vec_ste(vector bool int __a, long __b,
11495 int *__c) {
11496 __builtin_altivec_stvewx((vector int)__a, __b, __c);
11497}
11498
11499static __inline__ void __ATTRS_o_ai vec_ste(vector bool int __a, long __b,
11500 unsigned int *__c) {
11501 __builtin_altivec_stvewx((vector int)__a, __b, __c);
11502}
11503
11504static __inline__ void __ATTRS_o_ai vec_ste(vector float __a, long __b,
11505 float *__c) {
11506 __builtin_altivec_stvewx((vector int)__a, __b, __c);
11507}
11508
11509/* vec_stvebx */
11510
11511static __inline__ void __ATTRS_o_ai vec_stvebx(vector signed char __a, long __b,
11512 signed char *__c) {
11513 __builtin_altivec_stvebx((vector char)__a, __b, __c);
11514}
11515
11516static __inline__ void __ATTRS_o_ai vec_stvebx(vector unsigned char __a,
11517 long __b, unsigned char *__c) {
11518 __builtin_altivec_stvebx((vector char)__a, __b, __c);
11519}
11520
11521static __inline__ void __ATTRS_o_ai vec_stvebx(vector bool char __a, long __b,
11522 signed char *__c) {
11523 __builtin_altivec_stvebx((vector char)__a, __b, __c);
11524}
11525
11526static __inline__ void __ATTRS_o_ai vec_stvebx(vector bool char __a, long __b,
11527 unsigned char *__c) {
11528 __builtin_altivec_stvebx((vector char)__a, __b, __c);
11529}
11530
11531/* vec_stvehx */
11532
11533static __inline__ void __ATTRS_o_ai vec_stvehx(vector short __a, long __b,
11534 short *__c) {
11535 __builtin_altivec_stvehx(__a, __b, __c);
11536}
11537
11538static __inline__ void __ATTRS_o_ai vec_stvehx(vector unsigned short __a,
11539 long __b, unsigned short *__c) {
11540 __builtin_altivec_stvehx((vector short)__a, __b, __c);
11541}
11542
11543static __inline__ void __ATTRS_o_ai vec_stvehx(vector bool short __a, long __b,
11544 short *__c) {
11545 __builtin_altivec_stvehx((vector short)__a, __b, __c);
11546}
11547
11548static __inline__ void __ATTRS_o_ai vec_stvehx(vector bool short __a, long __b,
11549 unsigned short *__c) {
11550 __builtin_altivec_stvehx((vector short)__a, __b, __c);
11551}
11552
11553static __inline__ void __ATTRS_o_ai vec_stvehx(vector pixel __a, long __b,
11554 short *__c) {
11555 __builtin_altivec_stvehx((vector short)__a, __b, __c);
11556}
11557
11558static __inline__ void __ATTRS_o_ai vec_stvehx(vector pixel __a, long __b,
11559 unsigned short *__c) {
11560 __builtin_altivec_stvehx((vector short)__a, __b, __c);
11561}
11562
11563/* vec_stvewx */
11564
11565static __inline__ void __ATTRS_o_ai vec_stvewx(vector int __a, long __b,
11566 int *__c) {
11567 __builtin_altivec_stvewx(__a, __b, __c);
11568}
11569
11570static __inline__ void __ATTRS_o_ai vec_stvewx(vector unsigned int __a, long __b,
11571 unsigned int *__c) {
11572 __builtin_altivec_stvewx((vector int)__a, __b, __c);
11573}
11574
11575static __inline__ void __ATTRS_o_ai vec_stvewx(vector bool int __a, long __b,
11576 int *__c) {
11577 __builtin_altivec_stvewx((vector int)__a, __b, __c);
11578}
11579
11580static __inline__ void __ATTRS_o_ai vec_stvewx(vector bool int __a, long __b,
11581 unsigned int *__c) {
11582 __builtin_altivec_stvewx((vector int)__a, __b, __c);
11583}
11584
11585static __inline__ void __ATTRS_o_ai vec_stvewx(vector float __a, long __b,
11586 float *__c) {
11587 __builtin_altivec_stvewx((vector int)__a, __b, __c);
11588}
11589
11590/* vec_stl */
11591
11592static __inline__ void __ATTRS_o_ai vec_stl(vector signed char __a, int __b,
11593 vector signed char *__c) {
11594 __builtin_altivec_stvxl((vector int)__a, __b, __c);
11595}
11596
11597static __inline__ void __ATTRS_o_ai vec_stl(vector signed char __a, int __b,
11598 signed char *__c) {
11599 __builtin_altivec_stvxl((vector int)__a, __b, __c);
11600}
11601
11602static __inline__ void __ATTRS_o_ai vec_stl(vector unsigned char __a, int __b,
11603 vector unsigned char *__c) {
11604 __builtin_altivec_stvxl((vector int)__a, __b, __c);
11605}
11606
11607static __inline__ void __ATTRS_o_ai vec_stl(vector unsigned char __a, int __b,
11608 unsigned char *__c) {
11609 __builtin_altivec_stvxl((vector int)__a, __b, __c);
11610}
11611
11612static __inline__ void __ATTRS_o_ai vec_stl(vector bool char __a, int __b,
11613 signed char *__c) {
11614 __builtin_altivec_stvxl((vector int)__a, __b, __c);
11615}
11616
11617static __inline__ void __ATTRS_o_ai vec_stl(vector bool char __a, int __b,
11618 unsigned char *__c) {
11619 __builtin_altivec_stvxl((vector int)__a, __b, __c);
11620}
11621
11622static __inline__ void __ATTRS_o_ai vec_stl(vector bool char __a, int __b,
11623 vector bool char *__c) {
11624 __builtin_altivec_stvxl((vector int)__a, __b, __c);
11625}
11626
11627static __inline__ void __ATTRS_o_ai vec_stl(vector short __a, int __b,
11628 vector short *__c) {
11629 __builtin_altivec_stvxl((vector int)__a, __b, __c);
11630}
11631
11632static __inline__ void __ATTRS_o_ai vec_stl(vector short __a, int __b,
11633 short *__c) {
11634 __builtin_altivec_stvxl((vector int)__a, __b, __c);
11635}
11636
11637static __inline__ void __ATTRS_o_ai vec_stl(vector unsigned short __a, int __b,
11638 vector unsigned short *__c) {
11639 __builtin_altivec_stvxl((vector int)__a, __b, __c);
11640}
11641
11642static __inline__ void __ATTRS_o_ai vec_stl(vector unsigned short __a, int __b,
11643 unsigned short *__c) {
11644 __builtin_altivec_stvxl((vector int)__a, __b, __c);
11645}
11646
11647static __inline__ void __ATTRS_o_ai vec_stl(vector bool short __a, int __b,
11648 short *__c) {
11649 __builtin_altivec_stvxl((vector int)__a, __b, __c);
11650}
11651
11652static __inline__ void __ATTRS_o_ai vec_stl(vector bool short __a, int __b,
11653 unsigned short *__c) {
11654 __builtin_altivec_stvxl((vector int)__a, __b, __c);
11655}
11656
11657static __inline__ void __ATTRS_o_ai vec_stl(vector bool short __a, int __b,
11658 vector bool short *__c) {
11659 __builtin_altivec_stvxl((vector int)__a, __b, __c);
11660}
11661
11662static __inline__ void __ATTRS_o_ai vec_stl(vector pixel __a, int __b,
11663 short *__c) {
11664 __builtin_altivec_stvxl((vector int)__a, __b, __c);
11665}
11666
11667static __inline__ void __ATTRS_o_ai vec_stl(vector pixel __a, int __b,
11668 unsigned short *__c) {
11669 __builtin_altivec_stvxl((vector int)__a, __b, __c);
11670}
11671
11672static __inline__ void __ATTRS_o_ai vec_stl(vector pixel __a, int __b,
11673 vector pixel *__c) {
11674 __builtin_altivec_stvxl((vector int)__a, __b, __c);
11675}
11676
11677static __inline__ void __ATTRS_o_ai vec_stl(vector int __a, int __b,
11678 vector int *__c) {
11679 __builtin_altivec_stvxl(__a, __b, __c);
11680}
11681
11682static __inline__ void __ATTRS_o_ai vec_stl(vector int __a, int __b, int *__c) {
11683 __builtin_altivec_stvxl(__a, __b, __c);
11684}
11685
11686static __inline__ void __ATTRS_o_ai vec_stl(vector unsigned int __a, int __b,
11687 vector unsigned int *__c) {
11688 __builtin_altivec_stvxl((vector int)__a, __b, __c);
11689}
11690
11691static __inline__ void __ATTRS_o_ai vec_stl(vector unsigned int __a, int __b,
11692 unsigned int *__c) {
11693 __builtin_altivec_stvxl((vector int)__a, __b, __c);
11694}
11695
11696static __inline__ void __ATTRS_o_ai vec_stl(vector bool int __a, int __b,
11697 int *__c) {
11698 __builtin_altivec_stvxl((vector int)__a, __b, __c);
11699}
11700
11701static __inline__ void __ATTRS_o_ai vec_stl(vector bool int __a, int __b,
11702 unsigned int *__c) {
11703 __builtin_altivec_stvxl((vector int)__a, __b, __c);
11704}
11705
11706static __inline__ void __ATTRS_o_ai vec_stl(vector bool int __a, int __b,
11707 vector bool int *__c) {
11708 __builtin_altivec_stvxl((vector int)__a, __b, __c);
11709}
11710
11711static __inline__ void __ATTRS_o_ai vec_stl(vector float __a, int __b,
11712 vector float *__c) {
11713 __builtin_altivec_stvxl((vector int)__a, __b, __c);
11714}
11715
11716static __inline__ void __ATTRS_o_ai vec_stl(vector float __a, int __b,
11717 float *__c) {
11718 __builtin_altivec_stvxl((vector int)__a, __b, __c);
11719}
11720
11721/* vec_stvxl */
11722
11723static __inline__ void __ATTRS_o_ai vec_stvxl(vector signed char __a, int __b,
11724 vector signed char *__c) {
11725 __builtin_altivec_stvxl((vector int)__a, __b, __c);
11726}
11727
11728static __inline__ void __ATTRS_o_ai vec_stvxl(vector signed char __a, int __b,
11729 signed char *__c) {
11730 __builtin_altivec_stvxl((vector int)__a, __b, __c);
11731}
11732
11733static __inline__ void __ATTRS_o_ai vec_stvxl(vector unsigned char __a, int __b,
11734 vector unsigned char *__c) {
11735 __builtin_altivec_stvxl((vector int)__a, __b, __c);
11736}
11737
11738static __inline__ void __ATTRS_o_ai vec_stvxl(vector unsigned char __a, int __b,
11739 unsigned char *__c) {
11740 __builtin_altivec_stvxl((vector int)__a, __b, __c);
11741}
11742
11743static __inline__ void __ATTRS_o_ai vec_stvxl(vector bool char __a, int __b,
11744 signed char *__c) {
11745 __builtin_altivec_stvxl((vector int)__a, __b, __c);
11746}
11747
11748static __inline__ void __ATTRS_o_ai vec_stvxl(vector bool char __a, int __b,
11749 unsigned char *__c) {
11750 __builtin_altivec_stvxl((vector int)__a, __b, __c);
11751}
11752
11753static __inline__ void __ATTRS_o_ai vec_stvxl(vector bool char __a, int __b,
11754 vector bool char *__c) {
11755 __builtin_altivec_stvxl((vector int)__a, __b, __c);
11756}
11757
11758static __inline__ void __ATTRS_o_ai vec_stvxl(vector short __a, int __b,
11759 vector short *__c) {
11760 __builtin_altivec_stvxl((vector int)__a, __b, __c);
11761}
11762
11763static __inline__ void __ATTRS_o_ai vec_stvxl(vector short __a, int __b,
11764 short *__c) {
11765 __builtin_altivec_stvxl((vector int)__a, __b, __c);
11766}
11767
11768static __inline__ void __ATTRS_o_ai vec_stvxl(vector unsigned short __a,
11769 int __b,
11770 vector unsigned short *__c) {
11771 __builtin_altivec_stvxl((vector int)__a, __b, __c);
11772}
11773
11774static __inline__ void __ATTRS_o_ai vec_stvxl(vector unsigned short __a,
11775 int __b, unsigned short *__c) {
11776 __builtin_altivec_stvxl((vector int)__a, __b, __c);
11777}
11778
11779static __inline__ void __ATTRS_o_ai vec_stvxl(vector bool short __a, int __b,
11780 short *__c) {
11781 __builtin_altivec_stvxl((vector int)__a, __b, __c);
11782}
11783
11784static __inline__ void __ATTRS_o_ai vec_stvxl(vector bool short __a, int __b,
11785 unsigned short *__c) {
11786 __builtin_altivec_stvxl((vector int)__a, __b, __c);
11787}
11788
11789static __inline__ void __ATTRS_o_ai vec_stvxl(vector bool short __a, int __b,
11790 vector bool short *__c) {
11791 __builtin_altivec_stvxl((vector int)__a, __b, __c);
11792}
11793
11794static __inline__ void __ATTRS_o_ai vec_stvxl(vector pixel __a, int __b,
11795 short *__c) {
11796 __builtin_altivec_stvxl((vector int)__a, __b, __c);
11797}
11798
11799static __inline__ void __ATTRS_o_ai vec_stvxl(vector pixel __a, int __b,
11800 unsigned short *__c) {
11801 __builtin_altivec_stvxl((vector int)__a, __b, __c);
11802}
11803
11804static __inline__ void __ATTRS_o_ai vec_stvxl(vector pixel __a, int __b,
11805 vector pixel *__c) {
11806 __builtin_altivec_stvxl((vector int)__a, __b, __c);
11807}
11808
11809static __inline__ void __ATTRS_o_ai vec_stvxl(vector int __a, int __b,
11810 vector int *__c) {
11811 __builtin_altivec_stvxl(__a, __b, __c);
11812}
11813
11814static __inline__ void __ATTRS_o_ai vec_stvxl(vector int __a, int __b,
11815 int *__c) {
11816 __builtin_altivec_stvxl(__a, __b, __c);
11817}
11818
11819static __inline__ void __ATTRS_o_ai vec_stvxl(vector unsigned int __a, int __b,
11820 vector unsigned int *__c) {
11821 __builtin_altivec_stvxl((vector int)__a, __b, __c);
11822}
11823
11824static __inline__ void __ATTRS_o_ai vec_stvxl(vector unsigned int __a, int __b,
11825 unsigned int *__c) {
11826 __builtin_altivec_stvxl((vector int)__a, __b, __c);
11827}
11828
11829static __inline__ void __ATTRS_o_ai vec_stvxl(vector bool int __a, int __b,
11830 int *__c) {
11831 __builtin_altivec_stvxl((vector int)__a, __b, __c);
11832}
11833
11834static __inline__ void __ATTRS_o_ai vec_stvxl(vector bool int __a, int __b,
11835 unsigned int *__c) {
11836 __builtin_altivec_stvxl((vector int)__a, __b, __c);
11837}
11838
11839static __inline__ void __ATTRS_o_ai vec_stvxl(vector bool int __a, int __b,
11840 vector bool int *__c) {
11841 __builtin_altivec_stvxl((vector int)__a, __b, __c);
11842}
11843
11844static __inline__ void __ATTRS_o_ai vec_stvxl(vector float __a, int __b,
11845 vector float *__c) {
11846 __builtin_altivec_stvxl((vector int)__a, __b, __c);
11847}
11848
11849static __inline__ void __ATTRS_o_ai vec_stvxl(vector float __a, int __b,
11850 float *__c) {
11851 __builtin_altivec_stvxl((vector int)__a, __b, __c);
11852}
11853
11854/* vec_sub */
11855
11856static __inline__ vector signed char __ATTRS_o_ai
11857vec_sub(vector signed char __a, vector signed char __b) {
11858 return __a - __b;
11859}
11860
11861static __inline__ vector signed char __ATTRS_o_ai
11862vec_sub(vector bool char __a, vector signed char __b) {
11863 return (vector signed char)__a - __b;
11864}
11865
11866static __inline__ vector signed char __ATTRS_o_ai
11867vec_sub(vector signed char __a, vector bool char __b) {
11868 return __a - (vector signed char)__b;
11869}
11870
11871static __inline__ vector unsigned char __ATTRS_o_ai
11872vec_sub(vector unsigned char __a, vector unsigned char __b) {
11873 return __a - __b;
11874}
11875
11876static __inline__ vector unsigned char __ATTRS_o_ai
11877vec_sub(vector bool char __a, vector unsigned char __b) {
11878 return (vector unsigned char)__a - __b;
11879}
11880
11881static __inline__ vector unsigned char __ATTRS_o_ai
11882vec_sub(vector unsigned char __a, vector bool char __b) {
11883 return __a - (vector unsigned char)__b;
11884}
11885
11886static __inline__ vector short __ATTRS_o_ai vec_sub(vector short __a,
11887 vector short __b) {
11888 return __a - __b;
11889}
11890
11891static __inline__ vector short __ATTRS_o_ai vec_sub(vector bool short __a,
11892 vector short __b) {
11893 return (vector short)__a - __b;
11894}
11895
11896static __inline__ vector short __ATTRS_o_ai vec_sub(vector short __a,
11897 vector bool short __b) {
11898 return __a - (vector short)__b;
11899}
11900
11901static __inline__ vector unsigned short __ATTRS_o_ai
11902vec_sub(vector unsigned short __a, vector unsigned short __b) {
11903 return __a - __b;
11904}
11905
11906static __inline__ vector unsigned short __ATTRS_o_ai
11907vec_sub(vector bool short __a, vector unsigned short __b) {
11908 return (vector unsigned short)__a - __b;
11909}
11910
11911static __inline__ vector unsigned short __ATTRS_o_ai
11912vec_sub(vector unsigned short __a, vector bool short __b) {
11913 return __a - (vector unsigned short)__b;
11914}
11915
11916static __inline__ vector int __ATTRS_o_ai vec_sub(vector int __a,
11917 vector int __b) {
11918 return __a - __b;
11919}
11920
11921static __inline__ vector int __ATTRS_o_ai vec_sub(vector bool int __a,
11922 vector int __b) {
11923 return (vector int)__a - __b;
11924}
11925
11926static __inline__ vector int __ATTRS_o_ai vec_sub(vector int __a,
11927 vector bool int __b) {
11928 return __a - (vector int)__b;
11929}
11930
11931static __inline__ vector unsigned int __ATTRS_o_ai
11932vec_sub(vector unsigned int __a, vector unsigned int __b) {
11933 return __a - __b;
11934}
11935
11936static __inline__ vector unsigned int __ATTRS_o_ai
11937vec_sub(vector bool int __a, vector unsigned int __b) {
11938 return (vector unsigned int)__a - __b;
11939}
11940
11941static __inline__ vector unsigned int __ATTRS_o_ai
11942vec_sub(vector unsigned int __a, vector bool int __b) {
11943 return __a - (vector unsigned int)__b;
11944}
11945
11946#if defined(__POWER8_VECTOR__) && defined(__powerpc64__) && \
11947 defined(__SIZEOF_INT128__)
11948static __inline__ vector signed __int128 __ATTRS_o_ai
11949vec_sub(vector signed __int128 __a, vector signed __int128 __b) {
11950 return __a - __b;
11951}
11952
11953static __inline__ vector unsigned __int128 __ATTRS_o_ai
11954vec_sub(vector unsigned __int128 __a, vector unsigned __int128 __b) {
11955 return __a - __b;
11956}
11957#endif // defined(__POWER8_VECTOR__) && defined(__powerpc64__) &&
11958 // defined(__SIZEOF_INT128__)
11959
11960#ifdef __VSX__
11961static __inline__ vector signed long long __ATTRS_o_ai
11962vec_sub(vector signed long long __a, vector signed long long __b) {
11963 return __a - __b;
11964}
11965
11966static __inline__ vector unsigned long long __ATTRS_o_ai
11967vec_sub(vector unsigned long long __a, vector unsigned long long __b) {
11968 return __a - __b;
11969}
11970
11971static __inline__ vector double __ATTRS_o_ai vec_sub(vector double __a,
11972 vector double __b) {
11973 return __a - __b;
11974}
11975#endif
11976
11977static __inline__ vector float __ATTRS_o_ai vec_sub(vector float __a,
11978 vector float __b) {
11979 return __a - __b;
11980}
11981
11982/* vec_vsububm */
11983
11984#define __builtin_altivec_vsububm vec_vsububm
11985
11986static __inline__ vector signed char __ATTRS_o_ai
11987vec_vsububm(vector signed char __a, vector signed char __b) {
11988 return __a - __b;
11989}
11990
11991static __inline__ vector signed char __ATTRS_o_ai
11992vec_vsububm(vector bool char __a, vector signed char __b) {
11993 return (vector signed char)__a - __b;
11994}
11995
11996static __inline__ vector signed char __ATTRS_o_ai
11997vec_vsububm(vector signed char __a, vector bool char __b) {
11998 return __a - (vector signed char)__b;
11999}
12000
12001static __inline__ vector unsigned char __ATTRS_o_ai
12002vec_vsububm(vector unsigned char __a, vector unsigned char __b) {
12003 return __a - __b;
12004}
12005
12006static __inline__ vector unsigned char __ATTRS_o_ai
12007vec_vsububm(vector bool char __a, vector unsigned char __b) {
12008 return (vector unsigned char)__a - __b;
12009}
12010
12011static __inline__ vector unsigned char __ATTRS_o_ai
12012vec_vsububm(vector unsigned char __a, vector bool char __b) {
12013 return __a - (vector unsigned char)__b;
12014}
12015
12016/* vec_vsubuhm */
12017
12018#define __builtin_altivec_vsubuhm vec_vsubuhm
12019
12020static __inline__ vector short __ATTRS_o_ai vec_vsubuhm(vector short __a,
12021 vector short __b) {
12022 return __a - __b;
12023}
12024
12025static __inline__ vector short __ATTRS_o_ai vec_vsubuhm(vector bool short __a,
12026 vector short __b) {
12027 return (vector short)__a - __b;
12028}
12029
12030static __inline__ vector short __ATTRS_o_ai vec_vsubuhm(vector short __a,
12031 vector bool short __b) {
12032 return __a - (vector short)__b;
12033}
12034
12035static __inline__ vector unsigned short __ATTRS_o_ai
12036vec_vsubuhm(vector unsigned short __a, vector unsigned short __b) {
12037 return __a - __b;
12038}
12039
12040static __inline__ vector unsigned short __ATTRS_o_ai
12041vec_vsubuhm(vector bool short __a, vector unsigned short __b) {
12042 return (vector unsigned short)__a - __b;
12043}
12044
12045static __inline__ vector unsigned short __ATTRS_o_ai
12046vec_vsubuhm(vector unsigned short __a, vector bool short __b) {
12047 return __a - (vector unsigned short)__b;
12048}
12049
12050/* vec_vsubuwm */
12051
12052#define __builtin_altivec_vsubuwm vec_vsubuwm
12053
12054static __inline__ vector int __ATTRS_o_ai vec_vsubuwm(vector int __a,
12055 vector int __b) {
12056 return __a - __b;
12057}
12058
12059static __inline__ vector int __ATTRS_o_ai vec_vsubuwm(vector bool int __a,
12060 vector int __b) {
12061 return (vector int)__a - __b;
12062}
12063
12064static __inline__ vector int __ATTRS_o_ai vec_vsubuwm(vector int __a,
12065 vector bool int __b) {
12066 return __a - (vector int)__b;
12067}
12068
12069static __inline__ vector unsigned int __ATTRS_o_ai
12070vec_vsubuwm(vector unsigned int __a, vector unsigned int __b) {
12071 return __a - __b;
12072}
12073
12074static __inline__ vector unsigned int __ATTRS_o_ai
12075vec_vsubuwm(vector bool int __a, vector unsigned int __b) {
12076 return (vector unsigned int)__a - __b;
12077}
12078
12079static __inline__ vector unsigned int __ATTRS_o_ai
12080vec_vsubuwm(vector unsigned int __a, vector bool int __b) {
12081 return __a - (vector unsigned int)__b;
12082}
12083
12084/* vec_vsubfp */
12085
12086#define __builtin_altivec_vsubfp vec_vsubfp
12087
12088static __inline__ vector float __attribute__((__always_inline__))
12089vec_vsubfp(vector float __a, vector float __b) {
12090 return __a - __b;
12091}
12092
12093/* vec_subc */
12094
12095static __inline__ vector signed int __ATTRS_o_ai
12096vec_subc(vector signed int __a, vector signed int __b) {
12097 return (vector signed int)__builtin_altivec_vsubcuw((vector unsigned int)__a,
12098 (vector unsigned int) __b);
12099}
12100
12101static __inline__ vector unsigned int __ATTRS_o_ai
12102vec_subc(vector unsigned int __a, vector unsigned int __b) {
12103 return __builtin_altivec_vsubcuw(__a, __b);
12104}
12105
12106#ifdef __POWER8_VECTOR__
12107#ifdef __SIZEOF_INT128__
12108static __inline__ vector unsigned __int128 __ATTRS_o_ai
12109vec_subc(vector unsigned __int128 __a, vector unsigned __int128 __b) {
12110 return __builtin_altivec_vsubcuq(__a, __b);
12111}
12112
12113static __inline__ vector signed __int128 __ATTRS_o_ai
12114vec_subc(vector signed __int128 __a, vector signed __int128 __b) {
12115 return (vector signed __int128)__builtin_altivec_vsubcuq(
12116 (vector unsigned __int128)__a, (vector unsigned __int128)__b);
12117}
12118#endif
12119
12120static __inline__ vector unsigned char __attribute__((__always_inline__))
12121vec_subc_u128(vector unsigned char __a, vector unsigned char __b) {
12122 return (vector unsigned char)__builtin_altivec_vsubcuq_c(
12123 (vector unsigned char)__a, (vector unsigned char)__b);
12124}
12125#endif // __POWER8_VECTOR__
12126
12127/* vec_vsubcuw */
12128
12129static __inline__ vector unsigned int __attribute__((__always_inline__))
12130vec_vsubcuw(vector unsigned int __a, vector unsigned int __b) {
12131 return __builtin_altivec_vsubcuw(__a, __b);
12132}
12133
12134/* vec_subs */
12135
12136static __inline__ vector signed char __ATTRS_o_ai
12137vec_subs(vector signed char __a, vector signed char __b) {
12138 return __builtin_altivec_vsubsbs(__a, __b);
12139}
12140
12141static __inline__ vector signed char __ATTRS_o_ai
12142vec_subs(vector bool char __a, vector signed char __b) {
12143 return __builtin_altivec_vsubsbs((vector signed char)__a, __b);
12144}
12145
12146static __inline__ vector signed char __ATTRS_o_ai
12147vec_subs(vector signed char __a, vector bool char __b) {
12148 return __builtin_altivec_vsubsbs(__a, (vector signed char)__b);
12149}
12150
12151static __inline__ vector unsigned char __ATTRS_o_ai
12152vec_subs(vector unsigned char __a, vector unsigned char __b) {
12153 return __builtin_altivec_vsububs(__a, __b);
12154}
12155
12156static __inline__ vector unsigned char __ATTRS_o_ai
12157vec_subs(vector bool char __a, vector unsigned char __b) {
12158 return __builtin_altivec_vsububs((vector unsigned char)__a, __b);
12159}
12160
12161static __inline__ vector unsigned char __ATTRS_o_ai
12162vec_subs(vector unsigned char __a, vector bool char __b) {
12163 return __builtin_altivec_vsububs(__a, (vector unsigned char)__b);
12164}
12165
12166static __inline__ vector short __ATTRS_o_ai vec_subs(vector short __a,
12167 vector short __b) {
12168 return __builtin_altivec_vsubshs(__a, __b);
12169}
12170
12171static __inline__ vector short __ATTRS_o_ai vec_subs(vector bool short __a,
12172 vector short __b) {
12173 return __builtin_altivec_vsubshs((vector short)__a, __b);
12174}
12175
12176static __inline__ vector short __ATTRS_o_ai vec_subs(vector short __a,
12177 vector bool short __b) {
12178 return __builtin_altivec_vsubshs(__a, (vector short)__b);
12179}
12180
12181static __inline__ vector unsigned short __ATTRS_o_ai
12182vec_subs(vector unsigned short __a, vector unsigned short __b) {
12183 return __builtin_altivec_vsubuhs(__a, __b);
12184}
12185
12186static __inline__ vector unsigned short __ATTRS_o_ai
12187vec_subs(vector bool short __a, vector unsigned short __b) {
12188 return __builtin_altivec_vsubuhs((vector unsigned short)__a, __b);
12189}
12190
12191static __inline__ vector unsigned short __ATTRS_o_ai
12192vec_subs(vector unsigned short __a, vector bool short __b) {
12193 return __builtin_altivec_vsubuhs(__a, (vector unsigned short)__b);
12194}
12195
12196static __inline__ vector int __ATTRS_o_ai vec_subs(vector int __a,
12197 vector int __b) {
12198 return __builtin_altivec_vsubsws(__a, __b);
12199}
12200
12201static __inline__ vector int __ATTRS_o_ai vec_subs(vector bool int __a,
12202 vector int __b) {
12203 return __builtin_altivec_vsubsws((vector int)__a, __b);
12204}
12205
12206static __inline__ vector int __ATTRS_o_ai vec_subs(vector int __a,
12207 vector bool int __b) {
12208 return __builtin_altivec_vsubsws(__a, (vector int)__b);
12209}
12210
12211static __inline__ vector unsigned int __ATTRS_o_ai
12212vec_subs(vector unsigned int __a, vector unsigned int __b) {
12213 return __builtin_altivec_vsubuws(__a, __b);
12214}
12215
12216static __inline__ vector unsigned int __ATTRS_o_ai
12217vec_subs(vector bool int __a, vector unsigned int __b) {
12218 return __builtin_altivec_vsubuws((vector unsigned int)__a, __b);
12219}
12220
12221static __inline__ vector unsigned int __ATTRS_o_ai
12222vec_subs(vector unsigned int __a, vector bool int __b) {
12223 return __builtin_altivec_vsubuws(__a, (vector unsigned int)__b);
12224}
12225
12226/* vec_vsubsbs */
12227
12228static __inline__ vector signed char __ATTRS_o_ai
12229vec_vsubsbs(vector signed char __a, vector signed char __b) {
12230 return __builtin_altivec_vsubsbs(__a, __b);
12231}
12232
12233static __inline__ vector signed char __ATTRS_o_ai
12234vec_vsubsbs(vector bool char __a, vector signed char __b) {
12235 return __builtin_altivec_vsubsbs((vector signed char)__a, __b);
12236}
12237
12238static __inline__ vector signed char __ATTRS_o_ai
12239vec_vsubsbs(vector signed char __a, vector bool char __b) {
12240 return __builtin_altivec_vsubsbs(__a, (vector signed char)__b);
12241}
12242
12243/* vec_vsububs */
12244
12245static __inline__ vector unsigned char __ATTRS_o_ai
12246vec_vsububs(vector unsigned char __a, vector unsigned char __b) {
12247 return __builtin_altivec_vsububs(__a, __b);
12248}
12249
12250static __inline__ vector unsigned char __ATTRS_o_ai
12251vec_vsububs(vector bool char __a, vector unsigned char __b) {
12252 return __builtin_altivec_vsububs((vector unsigned char)__a, __b);
12253}
12254
12255static __inline__ vector unsigned char __ATTRS_o_ai
12256vec_vsububs(vector unsigned char __a, vector bool char __b) {
12257 return __builtin_altivec_vsububs(__a, (vector unsigned char)__b);
12258}
12259
12260/* vec_vsubshs */
12261
12262static __inline__ vector short __ATTRS_o_ai vec_vsubshs(vector short __a,
12263 vector short __b) {
12264 return __builtin_altivec_vsubshs(__a, __b);
12265}
12266
12267static __inline__ vector short __ATTRS_o_ai vec_vsubshs(vector bool short __a,
12268 vector short __b) {
12269 return __builtin_altivec_vsubshs((vector short)__a, __b);
12270}
12271
12272static __inline__ vector short __ATTRS_o_ai vec_vsubshs(vector short __a,
12273 vector bool short __b) {
12274 return __builtin_altivec_vsubshs(__a, (vector short)__b);
12275}
12276
12277/* vec_vsubuhs */
12278
12279static __inline__ vector unsigned short __ATTRS_o_ai
12280vec_vsubuhs(vector unsigned short __a, vector unsigned short __b) {
12281 return __builtin_altivec_vsubuhs(__a, __b);
12282}
12283
12284static __inline__ vector unsigned short __ATTRS_o_ai
12285vec_vsubuhs(vector bool short __a, vector unsigned short __b) {
12286 return __builtin_altivec_vsubuhs((vector unsigned short)__a, __b);
12287}
12288
12289static __inline__ vector unsigned short __ATTRS_o_ai
12290vec_vsubuhs(vector unsigned short __a, vector bool short __b) {
12291 return __builtin_altivec_vsubuhs(__a, (vector unsigned short)__b);
12292}
12293
12294/* vec_vsubsws */
12295
12296static __inline__ vector int __ATTRS_o_ai vec_vsubsws(vector int __a,
12297 vector int __b) {
12298 return __builtin_altivec_vsubsws(__a, __b);
12299}
12300
12301static __inline__ vector int __ATTRS_o_ai vec_vsubsws(vector bool int __a,
12302 vector int __b) {
12303 return __builtin_altivec_vsubsws((vector int)__a, __b);
12304}
12305
12306static __inline__ vector int __ATTRS_o_ai vec_vsubsws(vector int __a,
12307 vector bool int __b) {
12308 return __builtin_altivec_vsubsws(__a, (vector int)__b);
12309}
12310
12311/* vec_vsubuws */
12312
12313static __inline__ vector unsigned int __ATTRS_o_ai
12314vec_vsubuws(vector unsigned int __a, vector unsigned int __b) {
12315 return __builtin_altivec_vsubuws(__a, __b);
12316}
12317
12318static __inline__ vector unsigned int __ATTRS_o_ai
12319vec_vsubuws(vector bool int __a, vector unsigned int __b) {
12320 return __builtin_altivec_vsubuws((vector unsigned int)__a, __b);
12321}
12322
12323static __inline__ vector unsigned int __ATTRS_o_ai
12324vec_vsubuws(vector unsigned int __a, vector bool int __b) {
12325 return __builtin_altivec_vsubuws(__a, (vector unsigned int)__b);
12326}
12327
12328#ifdef __POWER8_VECTOR__
12329/* vec_vsubuqm */
12330
12331#ifdef __SIZEOF_INT128__
12332static __inline__ vector signed __int128 __ATTRS_o_ai
12333vec_vsubuqm(vector signed __int128 __a, vector signed __int128 __b) {
12334 return __a - __b;
12335}
12336
12337static __inline__ vector unsigned __int128 __ATTRS_o_ai
12338vec_vsubuqm(vector unsigned __int128 __a, vector unsigned __int128 __b) {
12339 return __a - __b;
12340}
12341#endif
12342
12343static __inline__ vector unsigned char __attribute__((__always_inline__))
12344vec_sub_u128(vector unsigned char __a, vector unsigned char __b) {
12345 return (vector unsigned char)__builtin_altivec_vsubuqm(__a, __b);
12346}
12347
12348/* vec_vsubeuqm */
12349
12350#ifdef __SIZEOF_INT128__
12351static __inline__ vector signed __int128 __ATTRS_o_ai
12352vec_vsubeuqm(vector signed __int128 __a, vector signed __int128 __b,
12353 vector signed __int128 __c) {
12354 return (vector signed __int128)__builtin_altivec_vsubeuqm(
12355 (vector unsigned __int128)__a, (vector unsigned __int128)__b,
12356 (vector unsigned __int128)__c);
12357}
12358
12359static __inline__ vector unsigned __int128 __ATTRS_o_ai
12360vec_vsubeuqm(vector unsigned __int128 __a, vector unsigned __int128 __b,
12361 vector unsigned __int128 __c) {
12362 return __builtin_altivec_vsubeuqm(__a, __b, __c);
12363}
12364
12365static __inline__ vector signed __int128 __ATTRS_o_ai
12366vec_sube(vector signed __int128 __a, vector signed __int128 __b,
12367 vector signed __int128 __c) {
12368 return (vector signed __int128)__builtin_altivec_vsubeuqm(
12369 (vector unsigned __int128)__a, (vector unsigned __int128)__b,
12370 (vector unsigned __int128)__c);
12371}
12372
12373static __inline__ vector unsigned __int128 __ATTRS_o_ai
12374vec_sube(vector unsigned __int128 __a, vector unsigned __int128 __b,
12375 vector unsigned __int128 __c) {
12376 return __builtin_altivec_vsubeuqm(__a, __b, __c);
12377}
12378#endif
12379
12380static __inline__ vector unsigned char __attribute__((__always_inline__))
12381vec_sube_u128(vector unsigned char __a, vector unsigned char __b,
12382 vector unsigned char __c) {
12383 return (vector unsigned char)__builtin_altivec_vsubeuqm_c(
12384 (vector unsigned char)__a, (vector unsigned char)__b,
12385 (vector unsigned char)__c);
12386}
12387
12388/* vec_vsubcuq */
12389
12390#ifdef __SIZEOF_INT128__
12391static __inline__ vector signed __int128 __ATTRS_o_ai
12392vec_vsubcuq(vector signed __int128 __a, vector signed __int128 __b) {
12393 return (vector signed __int128)__builtin_altivec_vsubcuq(
12394 (vector unsigned __int128)__a, (vector unsigned __int128)__b);
12395}
12396
12397static __inline__ vector unsigned __int128 __ATTRS_o_ai
12398vec_vsubcuq(vector unsigned __int128 __a, vector unsigned __int128 __b) {
12399 return __builtin_altivec_vsubcuq(__a, __b);
12400}
12401
12402/* vec_vsubecuq */
12403
12404static __inline__ vector signed __int128 __ATTRS_o_ai
12405vec_vsubecuq(vector signed __int128 __a, vector signed __int128 __b,
12406 vector signed __int128 __c) {
12407 return (vector signed __int128)__builtin_altivec_vsubecuq(
12408 (vector unsigned __int128)__a, (vector unsigned __int128)__b,
12409 (vector unsigned __int128)__c);
12410}
12411
12412static __inline__ vector unsigned __int128 __ATTRS_o_ai
12413vec_vsubecuq(vector unsigned __int128 __a, vector unsigned __int128 __b,
12414 vector unsigned __int128 __c) {
12415 return __builtin_altivec_vsubecuq(__a, __b, __c);
12416}
12417#endif
12418
12419#ifdef __powerpc64__
12420static __inline__ vector signed int __ATTRS_o_ai
12421vec_subec(vector signed int __a, vector signed int __b,
12422 vector signed int __c) {
12423 return vec_addec(__a, ~__b, __c);
12424}
12425
12426static __inline__ vector unsigned int __ATTRS_o_ai
12427vec_subec(vector unsigned int __a, vector unsigned int __b,
12428 vector unsigned int __c) {
12429 return vec_addec(__a, ~__b, __c);
12430}
12431#endif
12432
12433#ifdef __SIZEOF_INT128__
12434static __inline__ vector signed __int128 __ATTRS_o_ai
12435vec_subec(vector signed __int128 __a, vector signed __int128 __b,
12436 vector signed __int128 __c) {
12437 return (vector signed __int128)__builtin_altivec_vsubecuq(
12438 (vector unsigned __int128)__a, (vector unsigned __int128)__b,
12439 (vector unsigned __int128)__c);
12440}
12441
12442static __inline__ vector unsigned __int128 __ATTRS_o_ai
12443vec_subec(vector unsigned __int128 __a, vector unsigned __int128 __b,
12444 vector unsigned __int128 __c) {
12445 return __builtin_altivec_vsubecuq(__a, __b, __c);
12446}
12447#endif
12448
12449static __inline__ vector unsigned char __attribute__((__always_inline__))
12450vec_subec_u128(vector unsigned char __a, vector unsigned char __b,
12451 vector unsigned char __c) {
12452 return (vector unsigned char)__builtin_altivec_vsubecuq_c(
12453 (vector unsigned char)__a, (vector unsigned char)__b,
12454 (vector unsigned char)__c);
12455}
12456#endif // __POWER8_VECTOR__
12457
12458static __inline__ vector signed int __ATTRS_o_ai
12459vec_sube(vector signed int __a, vector signed int __b,
12460 vector signed int __c) {
12461 vector signed int __mask = {1, 1, 1, 1};
12462 vector signed int __carry = __c & __mask;
12463 return vec_adde(__a, ~__b, __carry);
12464}
12465
12466static __inline__ vector unsigned int __ATTRS_o_ai
12467vec_sube(vector unsigned int __a, vector unsigned int __b,
12468 vector unsigned int __c) {
12469 vector unsigned int __mask = {1, 1, 1, 1};
12470 vector unsigned int __carry = __c & __mask;
12471 return vec_adde(__a, ~__b, __carry);
12472}
12473/* vec_sum4s */
12474
12475static __inline__ vector int __ATTRS_o_ai vec_sum4s(vector signed char __a,
12476 vector int __b) {
12477 return __builtin_altivec_vsum4sbs(__a, __b);
12478}
12479
12480static __inline__ vector unsigned int __ATTRS_o_ai
12481vec_sum4s(vector unsigned char __a, vector unsigned int __b) {
12482 return __builtin_altivec_vsum4ubs(__a, __b);
12483}
12484
12485static __inline__ vector int __ATTRS_o_ai vec_sum4s(vector signed short __a,
12486 vector int __b) {
12487 return __builtin_altivec_vsum4shs(__a, __b);
12488}
12489
12490/* vec_vsum4sbs */
12491
12492static __inline__ vector int __attribute__((__always_inline__))
12493vec_vsum4sbs(vector signed char __a, vector int __b) {
12494 return __builtin_altivec_vsum4sbs(__a, __b);
12495}
12496
12497/* vec_vsum4ubs */
12498
12499static __inline__ vector unsigned int __attribute__((__always_inline__))
12500vec_vsum4ubs(vector unsigned char __a, vector unsigned int __b) {
12501 return __builtin_altivec_vsum4ubs(__a, __b);
12502}
12503
12504/* vec_vsum4shs */
12505
12506static __inline__ vector int __attribute__((__always_inline__))
12507vec_vsum4shs(vector signed short __a, vector int __b) {
12508 return __builtin_altivec_vsum4shs(__a, __b);
12509}
12510
12511/* vec_sum2s */
12512
12513/* The vsum2sws instruction has a big-endian bias, so that the second
12514 input vector and the result always reference big-endian elements
12515 1 and 3 (little-endian element 0 and 2). For ease of porting the
12516 programmer wants elements 1 and 3 in both cases, so for little
12517 endian we must perform some permutes. */
12518
12519static __inline__ vector signed int __attribute__((__always_inline__))
12520vec_sum2s(vector int __a, vector int __b) {
12521#ifdef __LITTLE_ENDIAN__
12522 vector int __c = (vector signed int)vec_perm(
12523 __b, __b, (vector unsigned char)(4, 5, 6, 7, 0, 1, 2, 3, 12, 13, 14, 15,
12524 8, 9, 10, 11));
12525 __c = __builtin_altivec_vsum2sws(__a, __c);
12526 return (vector signed int)vec_perm(
12527 __c, __c, (vector unsigned char)(4, 5, 6, 7, 0, 1, 2, 3, 12, 13, 14, 15,
12528 8, 9, 10, 11));
12529#else
12530 return __builtin_altivec_vsum2sws(__a, __b);
12531#endif
12532}
12533
12534/* vec_vsum2sws */
12535
12536static __inline__ vector signed int __attribute__((__always_inline__))
12537vec_vsum2sws(vector int __a, vector int __b) {
12538#ifdef __LITTLE_ENDIAN__
12539 vector int __c = (vector signed int)vec_perm(
12540 __b, __b, (vector unsigned char)(4, 5, 6, 7, 0, 1, 2, 3, 12, 13, 14, 15,
12541 8, 9, 10, 11));
12542 __c = __builtin_altivec_vsum2sws(__a, __c);
12543 return (vector signed int)vec_perm(
12544 __c, __c, (vector unsigned char)(4, 5, 6, 7, 0, 1, 2, 3, 12, 13, 14, 15,
12545 8, 9, 10, 11));
12546#else
12547 return __builtin_altivec_vsum2sws(__a, __b);
12548#endif
12549}
12550
12551/* vec_sums */
12552
12553/* The vsumsws instruction has a big-endian bias, so that the second
12554 input vector and the result always reference big-endian element 3
12555 (little-endian element 0). For ease of porting the programmer
12556 wants element 3 in both cases, so for little endian we must perform
12557 some permutes. */
12558
12559static __inline__ vector signed int __attribute__((__always_inline__))
12560vec_sums(vector signed int __a, vector signed int __b) {
12561#ifdef __LITTLE_ENDIAN__
12562 __b = (vector signed int)vec_splat(__b, 3);
12563 __b = __builtin_altivec_vsumsws(__a, __b);
12564 return (vector signed int)(0, 0, 0, __b[0]);
12565#else
12566 return __builtin_altivec_vsumsws(__a, __b);
12567#endif
12568}
12569
12570/* vec_vsumsws */
12571
12572static __inline__ vector signed int __attribute__((__always_inline__))
12573vec_vsumsws(vector signed int __a, vector signed int __b) {
12574#ifdef __LITTLE_ENDIAN__
12575 __b = (vector signed int)vec_splat(__b, 3);
12576 __b = __builtin_altivec_vsumsws(__a, __b);
12577 return (vector signed int)(0, 0, 0, __b[0]);
12578#else
12579 return __builtin_altivec_vsumsws(__a, __b);
12580#endif
12581}
12582
12583/* vec_trunc */
12584
12585static __inline__ vector float __ATTRS_o_ai vec_trunc(vector float __a) {
12586#ifdef __VSX__
12587 return __builtin_vsx_xvrspiz(__a);
12588#else
12589 return __builtin_altivec_vrfiz(__a);
12590#endif
12591}
12592
12593#ifdef __VSX__
12594static __inline__ vector double __ATTRS_o_ai vec_trunc(vector double __a) {
12595 return __builtin_vsx_xvrdpiz(__a);
12596}
12597#endif
12598
12599/* vec_roundz */
12600static __inline__ vector float __ATTRS_o_ai vec_roundz(vector float __a) {
12601 return vec_trunc(__a);
12602}
12603
12604#ifdef __VSX__
12605static __inline__ vector double __ATTRS_o_ai vec_roundz(vector double __a) {
12606 return vec_trunc(__a);
12607}
12608#endif
12609
12610/* vec_vrfiz */
12611
12612static __inline__ vector float __attribute__((__always_inline__))
12613vec_vrfiz(vector float __a) {
12614 return __builtin_altivec_vrfiz(__a);
12615}
12616
12617/* vec_unpackh */
12618
12619/* The vector unpack instructions all have a big-endian bias, so for
12620 little endian we must reverse the meanings of "high" and "low." */
12621#ifdef __LITTLE_ENDIAN__
12622#define vec_vupkhpx(__a) __builtin_altivec_vupklpx((vector short)(__a))
12623#define vec_vupklpx(__a) __builtin_altivec_vupkhpx((vector short)(__a))
12624#else
12625#define vec_vupkhpx(__a) __builtin_altivec_vupkhpx((vector short)(__a))
12626#define vec_vupklpx(__a) __builtin_altivec_vupklpx((vector short)(__a))
12627#endif
12628
12629static __inline__ vector short __ATTRS_o_ai
12630vec_unpackh(vector signed char __a) {
12631#ifdef __LITTLE_ENDIAN__
12632 return __builtin_altivec_vupklsb((vector char)__a);
12633#else
12634 return __builtin_altivec_vupkhsb((vector char)__a);
12635#endif
12636}
12637
12638static __inline__ vector bool short __ATTRS_o_ai
12639vec_unpackh(vector bool char __a) {
12640#ifdef __LITTLE_ENDIAN__
12641 return (vector bool short)__builtin_altivec_vupklsb((vector char)__a);
12642#else
12643 return (vector bool short)__builtin_altivec_vupkhsb((vector char)__a);
12644#endif
12645}
12646
12647static __inline__ vector int __ATTRS_o_ai vec_unpackh(vector short __a) {
12648#ifdef __LITTLE_ENDIAN__
12649 return __builtin_altivec_vupklsh(__a);
12650#else
12651 return __builtin_altivec_vupkhsh(__a);
12652#endif
12653}
12654
12655static __inline__ vector bool int __ATTRS_o_ai
12656vec_unpackh(vector bool short __a) {
12657#ifdef __LITTLE_ENDIAN__
12658 return (vector bool int)__builtin_altivec_vupklsh((vector short)__a);
12659#else
12660 return (vector bool int)__builtin_altivec_vupkhsh((vector short)__a);
12661#endif
12662}
12663
12664static __inline__ vector unsigned int __ATTRS_o_ai
12665vec_unpackh(vector pixel __a) {
12666#ifdef __LITTLE_ENDIAN__
12667 return (vector unsigned int)__builtin_altivec_vupklpx((vector short)__a);
12668#else
12669 return (vector unsigned int)__builtin_altivec_vupkhpx((vector short)__a);
12670#endif
12671}
12672
12673#ifdef __POWER8_VECTOR__
12674static __inline__ vector long long __ATTRS_o_ai vec_unpackh(vector int __a) {
12675#ifdef __LITTLE_ENDIAN__
12676 return __builtin_altivec_vupklsw(__a);
12677#else
12678 return __builtin_altivec_vupkhsw(__a);
12679#endif
12680}
12681
12682static __inline__ vector bool long long __ATTRS_o_ai
12683vec_unpackh(vector bool int __a) {
12684#ifdef __LITTLE_ENDIAN__
12685 return (vector bool long long)__builtin_altivec_vupklsw((vector int)__a);
12686#else
12687 return (vector bool long long)__builtin_altivec_vupkhsw((vector int)__a);
12688#endif
12689}
12690
12691static __inline__ vector double __ATTRS_o_ai
12692vec_unpackh(vector float __a) {
12693 return (vector double)(__a[0], __a[1]);
12694}
12695#endif
12696
12697/* vec_vupkhsb */
12698
12699static __inline__ vector short __ATTRS_o_ai
12700vec_vupkhsb(vector signed char __a) {
12701#ifdef __LITTLE_ENDIAN__
12702 return __builtin_altivec_vupklsb((vector char)__a);
12703#else
12704 return __builtin_altivec_vupkhsb((vector char)__a);
12705#endif
12706}
12707
12708static __inline__ vector bool short __ATTRS_o_ai
12709vec_vupkhsb(vector bool char __a) {
12710#ifdef __LITTLE_ENDIAN__
12711 return (vector bool short)__builtin_altivec_vupklsb((vector char)__a);
12712#else
12713 return (vector bool short)__builtin_altivec_vupkhsb((vector char)__a);
12714#endif
12715}
12716
12717/* vec_vupkhsh */
12718
12719static __inline__ vector int __ATTRS_o_ai vec_vupkhsh(vector short __a) {
12720#ifdef __LITTLE_ENDIAN__
12721 return __builtin_altivec_vupklsh(__a);
12722#else
12723 return __builtin_altivec_vupkhsh(__a);
12724#endif
12725}
12726
12727static __inline__ vector bool int __ATTRS_o_ai
12728vec_vupkhsh(vector bool short __a) {
12729#ifdef __LITTLE_ENDIAN__
12730 return (vector bool int)__builtin_altivec_vupklsh((vector short)__a);
12731#else
12732 return (vector bool int)__builtin_altivec_vupkhsh((vector short)__a);
12733#endif
12734}
12735
12736static __inline__ vector unsigned int __ATTRS_o_ai
12737vec_vupkhsh(vector pixel __a) {
12738#ifdef __LITTLE_ENDIAN__
12739 return (vector unsigned int)__builtin_altivec_vupklpx((vector short)__a);
12740#else
12741 return (vector unsigned int)__builtin_altivec_vupkhpx((vector short)__a);
12742#endif
12743}
12744
12745/* vec_vupkhsw */
12746
12747#ifdef __POWER8_VECTOR__
12748static __inline__ vector long long __ATTRS_o_ai vec_vupkhsw(vector int __a) {
12749#ifdef __LITTLE_ENDIAN__
12750 return __builtin_altivec_vupklsw(__a);
12751#else
12752 return __builtin_altivec_vupkhsw(__a);
12753#endif
12754}
12755
12756static __inline__ vector bool long long __ATTRS_o_ai
12757vec_vupkhsw(vector bool int __a) {
12758#ifdef __LITTLE_ENDIAN__
12759 return (vector bool long long)__builtin_altivec_vupklsw((vector int)__a);
12760#else
12761 return (vector bool long long)__builtin_altivec_vupkhsw((vector int)__a);
12762#endif
12763}
12764#endif
12765
12766/* vec_unpackl */
12767
12768static __inline__ vector short __ATTRS_o_ai
12769vec_unpackl(vector signed char __a) {
12770#ifdef __LITTLE_ENDIAN__
12771 return __builtin_altivec_vupkhsb((vector char)__a);
12772#else
12773 return __builtin_altivec_vupklsb((vector char)__a);
12774#endif
12775}
12776
12777static __inline__ vector bool short __ATTRS_o_ai
12778vec_unpackl(vector bool char __a) {
12779#ifdef __LITTLE_ENDIAN__
12780 return (vector bool short)__builtin_altivec_vupkhsb((vector char)__a);
12781#else
12782 return (vector bool short)__builtin_altivec_vupklsb((vector char)__a);
12783#endif
12784}
12785
12786static __inline__ vector int __ATTRS_o_ai vec_unpackl(vector short __a) {
12787#ifdef __LITTLE_ENDIAN__
12788 return __builtin_altivec_vupkhsh(__a);
12789#else
12790 return __builtin_altivec_vupklsh(__a);
12791#endif
12792}
12793
12794static __inline__ vector bool int __ATTRS_o_ai
12795vec_unpackl(vector bool short __a) {
12796#ifdef __LITTLE_ENDIAN__
12797 return (vector bool int)__builtin_altivec_vupkhsh((vector short)__a);
12798#else
12799 return (vector bool int)__builtin_altivec_vupklsh((vector short)__a);
12800#endif
12801}
12802
12803static __inline__ vector unsigned int __ATTRS_o_ai
12804vec_unpackl(vector pixel __a) {
12805#ifdef __LITTLE_ENDIAN__
12806 return (vector unsigned int)__builtin_altivec_vupkhpx((vector short)__a);
12807#else
12808 return (vector unsigned int)__builtin_altivec_vupklpx((vector short)__a);
12809#endif
12810}
12811
12812#ifdef __POWER8_VECTOR__
12813static __inline__ vector long long __ATTRS_o_ai vec_unpackl(vector int __a) {
12814#ifdef __LITTLE_ENDIAN__
12815 return __builtin_altivec_vupkhsw(__a);
12816#else
12817 return __builtin_altivec_vupklsw(__a);
12818#endif
12819}
12820
12821static __inline__ vector bool long long __ATTRS_o_ai
12822vec_unpackl(vector bool int __a) {
12823#ifdef __LITTLE_ENDIAN__
12824 return (vector bool long long)__builtin_altivec_vupkhsw((vector int)__a);
12825#else
12826 return (vector bool long long)__builtin_altivec_vupklsw((vector int)__a);
12827#endif
12828}
12829
12830static __inline__ vector double __ATTRS_o_ai
12831vec_unpackl(vector float __a) {
12832 return (vector double)(__a[2], __a[3]);
12833}
12834#endif
12835
12836/* vec_vupklsb */
12837
12838static __inline__ vector short __ATTRS_o_ai
12839vec_vupklsb(vector signed char __a) {
12840#ifdef __LITTLE_ENDIAN__
12841 return __builtin_altivec_vupkhsb((vector char)__a);
12842#else
12843 return __builtin_altivec_vupklsb((vector char)__a);
12844#endif
12845}
12846
12847static __inline__ vector bool short __ATTRS_o_ai
12848vec_vupklsb(vector bool char __a) {
12849#ifdef __LITTLE_ENDIAN__
12850 return (vector bool short)__builtin_altivec_vupkhsb((vector char)__a);
12851#else
12852 return (vector bool short)__builtin_altivec_vupklsb((vector char)__a);
12853#endif
12854}
12855
12856/* vec_vupklsh */
12857
12858static __inline__ vector int __ATTRS_o_ai vec_vupklsh(vector short __a) {
12859#ifdef __LITTLE_ENDIAN__
12860 return __builtin_altivec_vupkhsh(__a);
12861#else
12862 return __builtin_altivec_vupklsh(__a);
12863#endif
12864}
12865
12866static __inline__ vector bool int __ATTRS_o_ai
12867vec_vupklsh(vector bool short __a) {
12868#ifdef __LITTLE_ENDIAN__
12869 return (vector bool int)__builtin_altivec_vupkhsh((vector short)__a);
12870#else
12871 return (vector bool int)__builtin_altivec_vupklsh((vector short)__a);
12872#endif
12873}
12874
12875static __inline__ vector unsigned int __ATTRS_o_ai
12876vec_vupklsh(vector pixel __a) {
12877#ifdef __LITTLE_ENDIAN__
12878 return (vector unsigned int)__builtin_altivec_vupkhpx((vector short)__a);
12879#else
12880 return (vector unsigned int)__builtin_altivec_vupklpx((vector short)__a);
12881#endif
12882}
12883
12884/* vec_vupklsw */
12885
12886#ifdef __POWER8_VECTOR__
12887static __inline__ vector long long __ATTRS_o_ai vec_vupklsw(vector int __a) {
12888#ifdef __LITTLE_ENDIAN__
12889 return __builtin_altivec_vupkhsw(__a);
12890#else
12891 return __builtin_altivec_vupklsw(__a);
12892#endif
12893}
12894
12895static __inline__ vector bool long long __ATTRS_o_ai
12896vec_vupklsw(vector bool int __a) {
12897#ifdef __LITTLE_ENDIAN__
12898 return (vector bool long long)__builtin_altivec_vupkhsw((vector int)__a);
12899#else
12900 return (vector bool long long)__builtin_altivec_vupklsw((vector int)__a);
12901#endif
12902}
12903#endif
12904
12905/* vec_vsx_ld */
12906
12907#ifdef __VSX__
12908
12909static __inline__ vector bool int __ATTRS_o_ai
12910vec_vsx_ld(int __a, const vector bool int *__b) {
12911 return (vector bool int)__builtin_vsx_lxvw4x(__a, __b);
12912}
12913
12914static __inline__ vector signed int __ATTRS_o_ai
12915vec_vsx_ld(int __a, const vector signed int *__b) {
12916 return (vector signed int)__builtin_vsx_lxvw4x(__a, __b);
12917}
12918
12919static __inline__ vector signed int __ATTRS_o_ai
12920vec_vsx_ld(int __a, const signed int *__b) {
12921 return (vector signed int)__builtin_vsx_lxvw4x(__a, __b);
12922}
12923
12924static __inline__ vector unsigned int __ATTRS_o_ai
12925vec_vsx_ld(int __a, const vector unsigned int *__b) {
12926 return (vector unsigned int)__builtin_vsx_lxvw4x(__a, __b);
12927}
12928
12929static __inline__ vector unsigned int __ATTRS_o_ai
12930vec_vsx_ld(int __a, const unsigned int *__b) {
12931 return (vector unsigned int)__builtin_vsx_lxvw4x(__a, __b);
12932}
12933
12934static __inline__ vector float __ATTRS_o_ai
12935vec_vsx_ld(int __a, const vector float *__b) {
12936 return (vector float)__builtin_vsx_lxvw4x(__a, __b);
12937}
12938
12939static __inline__ vector float __ATTRS_o_ai vec_vsx_ld(int __a,
12940 const float *__b) {
12941 return (vector float)__builtin_vsx_lxvw4x(__a, __b);
12942}
12943
12944static __inline__ vector signed long long __ATTRS_o_ai
12945vec_vsx_ld(int __a, const vector signed long long *__b) {
12946 return (vector signed long long)__builtin_vsx_lxvd2x(__a, __b);
12947}
12948
12949static __inline__ vector unsigned long long __ATTRS_o_ai
12950vec_vsx_ld(int __a, const vector unsigned long long *__b) {
12951 return (vector unsigned long long)__builtin_vsx_lxvd2x(__a, __b);
12952}
12953
12954static __inline__ vector double __ATTRS_o_ai
12955vec_vsx_ld(int __a, const vector double *__b) {
12956 return (vector double)__builtin_vsx_lxvd2x(__a, __b);
12957}
12958
12959static __inline__ vector double __ATTRS_o_ai
12960vec_vsx_ld(int __a, const double *__b) {
12961 return (vector double)__builtin_vsx_lxvd2x(__a, __b);
12962}
12963
12964static __inline__ vector bool short __ATTRS_o_ai
12965vec_vsx_ld(int __a, const vector bool short *__b) {
12966 return (vector bool short)__builtin_vsx_lxvw4x(__a, __b);
12967}
12968
12969static __inline__ vector signed short __ATTRS_o_ai
12970vec_vsx_ld(int __a, const vector signed short *__b) {
12971 return (vector signed short)__builtin_vsx_lxvw4x(__a, __b);
12972}
12973
12974static __inline__ vector signed short __ATTRS_o_ai
12975vec_vsx_ld(int __a, const signed short *__b) {
12976 return (vector signed short)__builtin_vsx_lxvw4x(__a, __b);
12977}
12978
12979static __inline__ vector unsigned short __ATTRS_o_ai
12980vec_vsx_ld(int __a, const vector unsigned short *__b) {
12981 return (vector unsigned short)__builtin_vsx_lxvw4x(__a, __b);
12982}
12983
12984static __inline__ vector unsigned short __ATTRS_o_ai
12985vec_vsx_ld(int __a, const unsigned short *__b) {
12986 return (vector unsigned short)__builtin_vsx_lxvw4x(__a, __b);
12987}
12988
12989static __inline__ vector bool char __ATTRS_o_ai
12990vec_vsx_ld(int __a, const vector bool char *__b) {
12991 return (vector bool char)__builtin_vsx_lxvw4x(__a, __b);
12992}
12993
12994static __inline__ vector signed char __ATTRS_o_ai
12995vec_vsx_ld(int __a, const vector signed char *__b) {
12996 return (vector signed char)__builtin_vsx_lxvw4x(__a, __b);
12997}
12998
12999static __inline__ vector signed char __ATTRS_o_ai
13000vec_vsx_ld(int __a, const signed char *__b) {
13001 return (vector signed char)__builtin_vsx_lxvw4x(__a, __b);
13002}
13003
13004static __inline__ vector unsigned char __ATTRS_o_ai
13005vec_vsx_ld(int __a, const vector unsigned char *__b) {
13006 return (vector unsigned char)__builtin_vsx_lxvw4x(__a, __b);
13007}
13008
13009static __inline__ vector unsigned char __ATTRS_o_ai
13010vec_vsx_ld(int __a, const unsigned char *__b) {
13011 return (vector unsigned char)__builtin_vsx_lxvw4x(__a, __b);
13012}
13013
13014#endif
13015
13016/* vec_vsx_st */
13017
13018#ifdef __VSX__
13019
13020static __inline__ void __ATTRS_o_ai vec_vsx_st(vector bool int __a, int __b,
13021 vector bool int *__c) {
13022 __builtin_vsx_stxvw4x((vector int)__a, __b, __c);
13023}
13024
13025static __inline__ void __ATTRS_o_ai vec_vsx_st(vector bool int __a, int __b,
13026 signed int *__c) {
13027 __builtin_vsx_stxvw4x((vector int)__a, __b, __c);
13028}
13029
13030static __inline__ void __ATTRS_o_ai vec_vsx_st(vector bool int __a, int __b,
13031 unsigned int *__c) {
13032 __builtin_vsx_stxvw4x((vector int)__a, __b, __c);
13033}
13034
13035static __inline__ void __ATTRS_o_ai vec_vsx_st(vector signed int __a, int __b,
13036 vector signed int *__c) {
13037 __builtin_vsx_stxvw4x((vector int)__a, __b, __c);
13038}
13039
13040static __inline__ void __ATTRS_o_ai vec_vsx_st(vector signed int __a, int __b,
13041 signed int *__c) {
13042 __builtin_vsx_stxvw4x((vector int)__a, __b, __c);
13043}
13044
13045static __inline__ void __ATTRS_o_ai vec_vsx_st(vector unsigned int __a, int __b,
13046 vector unsigned int *__c) {
13047 __builtin_vsx_stxvw4x((vector int)__a, __b, __c);
13048}
13049
13050static __inline__ void __ATTRS_o_ai vec_vsx_st(vector unsigned int __a, int __b,
13051 unsigned int *__c) {
13052 __builtin_vsx_stxvw4x((vector int)__a, __b, __c);
13053}
13054
13055static __inline__ void __ATTRS_o_ai vec_vsx_st(vector float __a, int __b,
13056 vector float *__c) {
13057 __builtin_vsx_stxvw4x((vector int)__a, __b, __c);
13058}
13059
13060static __inline__ void __ATTRS_o_ai vec_vsx_st(vector float __a, int __b,
13061 float *__c) {
13062 __builtin_vsx_stxvw4x((vector int)__a, __b, __c);
13063}
13064
13065static __inline__ void __ATTRS_o_ai vec_vsx_st(vector signed long long __a,
13066 int __b,
13067 vector signed long long *__c) {
13068 __builtin_vsx_stxvd2x((vector double)__a, __b, __c);
13069}
13070
13071static __inline__ void __ATTRS_o_ai vec_vsx_st(vector unsigned long long __a,
13072 int __b,
13073 vector unsigned long long *__c) {
13074 __builtin_vsx_stxvd2x((vector double)__a, __b, __c);
13075}
13076
13077static __inline__ void __ATTRS_o_ai vec_vsx_st(vector double __a, int __b,
13078 vector double *__c) {
13079 __builtin_vsx_stxvd2x((vector double)__a, __b, __c);
13080}
13081
13082static __inline__ void __ATTRS_o_ai vec_vsx_st(vector double __a, int __b,
13083 double *__c) {
13084 __builtin_vsx_stxvd2x((vector double)__a, __b, __c);
13085}
13086
13087static __inline__ void __ATTRS_o_ai vec_vsx_st(vector bool short __a, int __b,
13088 vector bool short *__c) {
13089 __builtin_vsx_stxvw4x((vector int)__a, __b, __c);
13090}
13091
13092static __inline__ void __ATTRS_o_ai vec_vsx_st(vector bool short __a, int __b,
13093 signed short *__c) {
13094 __builtin_vsx_stxvw4x((vector int)__a, __b, __c);
13095}
13096
13097static __inline__ void __ATTRS_o_ai vec_vsx_st(vector bool short __a, int __b,
13098 unsigned short *__c) {
13099 __builtin_vsx_stxvw4x((vector int)__a, __b, __c);
13100}
13101static __inline__ void __ATTRS_o_ai vec_vsx_st(vector signed short __a, int __b,
13102 vector signed short *__c) {
13103 __builtin_vsx_stxvw4x((vector int)__a, __b, __c);
13104}
13105
13106static __inline__ void __ATTRS_o_ai vec_vsx_st(vector signed short __a, int __b,
13107 signed short *__c) {
13108 __builtin_vsx_stxvw4x((vector int)__a, __b, __c);
13109}
13110
13111static __inline__ void __ATTRS_o_ai vec_vsx_st(vector unsigned short __a,
13112 int __b,
13113 vector unsigned short *__c) {
13114 __builtin_vsx_stxvw4x((vector int)__a, __b, __c);
13115}
13116
13117static __inline__ void __ATTRS_o_ai vec_vsx_st(vector unsigned short __a,
13118 int __b, unsigned short *__c) {
13119 __builtin_vsx_stxvw4x((vector int)__a, __b, __c);
13120}
13121
13122static __inline__ void __ATTRS_o_ai vec_vsx_st(vector bool char __a, int __b,
13123 vector bool char *__c) {
13124 __builtin_vsx_stxvw4x((vector int)__a, __b, __c);
13125}
13126
13127static __inline__ void __ATTRS_o_ai vec_vsx_st(vector bool char __a, int __b,
13128 signed char *__c) {
13129 __builtin_vsx_stxvw4x((vector int)__a, __b, __c);
13130}
13131
13132static __inline__ void __ATTRS_o_ai vec_vsx_st(vector bool char __a, int __b,
13133 unsigned char *__c) {
13134 __builtin_vsx_stxvw4x((vector int)__a, __b, __c);
13135}
13136
13137static __inline__ void __ATTRS_o_ai vec_vsx_st(vector signed char __a, int __b,
13138 vector signed char *__c) {
13139 __builtin_vsx_stxvw4x((vector int)__a, __b, __c);
13140}
13141
13142static __inline__ void __ATTRS_o_ai vec_vsx_st(vector signed char __a, int __b,
13143 signed char *__c) {
13144 __builtin_vsx_stxvw4x((vector int)__a, __b, __c);
13145}
13146
13147static __inline__ void __ATTRS_o_ai vec_vsx_st(vector unsigned char __a,
13148 int __b,
13149 vector unsigned char *__c) {
13150 __builtin_vsx_stxvw4x((vector int)__a, __b, __c);
13151}
13152
13153static __inline__ void __ATTRS_o_ai vec_vsx_st(vector unsigned char __a,
13154 int __b, unsigned char *__c) {
13155 __builtin_vsx_stxvw4x((vector int)__a, __b, __c);
13156}
13157
13158#endif
13159
13160#ifdef __VSX__
13161#define vec_xxpermdi __builtin_vsx_xxpermdi
13162#define vec_xxsldwi __builtin_vsx_xxsldwi
13163#define vec_permi(__a, __b, __c) \
13164 _Generic((__a), vector signed long long \
13165 : __builtin_shufflevector((__a), (__b), (((__c) >> 1) & 0x1), \
13166 (((__c)&0x1) + 2)), \
13167 vector unsigned long long \
13168 : __builtin_shufflevector((__a), (__b), (((__c) >> 1) & 0x1), \
13169 (((__c)&0x1) + 2)), \
13170 vector double \
13171 : __builtin_shufflevector((__a), (__b), (((__c) >> 1) & 0x1), \
13172 (((__c)&0x1) + 2)))
13173#endif
13174
13175/* vec_xor */
13176
13177#define __builtin_altivec_vxor vec_xor
13178
13179static __inline__ vector signed char __ATTRS_o_ai
13180vec_xor(vector signed char __a, vector signed char __b) {
13181 return __a ^ __b;
13182}
13183
13184static __inline__ vector signed char __ATTRS_o_ai
13185vec_xor(vector bool char __a, vector signed char __b) {
13186 return (vector signed char)__a ^ __b;
13187}
13188
13189static __inline__ vector signed char __ATTRS_o_ai
13190vec_xor(vector signed char __a, vector bool char __b) {
13191 return __a ^ (vector signed char)__b;
13192}
13193
13194static __inline__ vector unsigned char __ATTRS_o_ai
13195vec_xor(vector unsigned char __a, vector unsigned char __b) {
13196 return __a ^ __b;
13197}
13198
13199static __inline__ vector unsigned char __ATTRS_o_ai
13200vec_xor(vector bool char __a, vector unsigned char __b) {
13201 return (vector unsigned char)__a ^ __b;
13202}
13203
13204static __inline__ vector unsigned char __ATTRS_o_ai
13205vec_xor(vector unsigned char __a, vector bool char __b) {
13206 return __a ^ (vector unsigned char)__b;
13207}
13208
13209static __inline__ vector bool char __ATTRS_o_ai vec_xor(vector bool char __a,
13210 vector bool char __b) {
13211 return __a ^ __b;
13212}
13213
13214static __inline__ vector short __ATTRS_o_ai vec_xor(vector short __a,
13215 vector short __b) {
13216 return __a ^ __b;
13217}
13218
13219static __inline__ vector short __ATTRS_o_ai vec_xor(vector bool short __a,
13220 vector short __b) {
13221 return (vector short)__a ^ __b;
13222}
13223
13224static __inline__ vector short __ATTRS_o_ai vec_xor(vector short __a,
13225 vector bool short __b) {
13226 return __a ^ (vector short)__b;
13227}
13228
13229static __inline__ vector unsigned short __ATTRS_o_ai
13230vec_xor(vector unsigned short __a, vector unsigned short __b) {
13231 return __a ^ __b;
13232}
13233
13234static __inline__ vector unsigned short __ATTRS_o_ai
13235vec_xor(vector bool short __a, vector unsigned short __b) {
13236 return (vector unsigned short)__a ^ __b;
13237}
13238
13239static __inline__ vector unsigned short __ATTRS_o_ai
13240vec_xor(vector unsigned short __a, vector bool short __b) {
13241 return __a ^ (vector unsigned short)__b;
13242}
13243
13244static __inline__ vector bool short __ATTRS_o_ai
13245vec_xor(vector bool short __a, vector bool short __b) {
13246 return __a ^ __b;
13247}
13248
13249static __inline__ vector int __ATTRS_o_ai vec_xor(vector int __a,
13250 vector int __b) {
13251 return __a ^ __b;
13252}
13253
13254static __inline__ vector int __ATTRS_o_ai vec_xor(vector bool int __a,
13255 vector int __b) {
13256 return (vector int)__a ^ __b;
13257}
13258
13259static __inline__ vector int __ATTRS_o_ai vec_xor(vector int __a,
13260 vector bool int __b) {
13261 return __a ^ (vector int)__b;
13262}
13263
13264static __inline__ vector unsigned int __ATTRS_o_ai
13265vec_xor(vector unsigned int __a, vector unsigned int __b) {
13266 return __a ^ __b;
13267}
13268
13269static __inline__ vector unsigned int __ATTRS_o_ai
13270vec_xor(vector bool int __a, vector unsigned int __b) {
13271 return (vector unsigned int)__a ^ __b;
13272}
13273
13274static __inline__ vector unsigned int __ATTRS_o_ai
13275vec_xor(vector unsigned int __a, vector bool int __b) {
13276 return __a ^ (vector unsigned int)__b;
13277}
13278
13279static __inline__ vector bool int __ATTRS_o_ai vec_xor(vector bool int __a,
13280 vector bool int __b) {
13281 return __a ^ __b;
13282}
13283
13284static __inline__ vector float __ATTRS_o_ai vec_xor(vector float __a,
13285 vector float __b) {
13286 vector unsigned int __res =
13287 (vector unsigned int)__a ^ (vector unsigned int)__b;
13288 return (vector float)__res;
13289}
13290
13291static __inline__ vector float __ATTRS_o_ai vec_xor(vector bool int __a,
13292 vector float __b) {
13293 vector unsigned int __res =
13294 (vector unsigned int)__a ^ (vector unsigned int)__b;
13295 return (vector float)__res;
13296}
13297
13298static __inline__ vector float __ATTRS_o_ai vec_xor(vector float __a,
13299 vector bool int __b) {
13300 vector unsigned int __res =
13301 (vector unsigned int)__a ^ (vector unsigned int)__b;
13302 return (vector float)__res;
13303}
13304
13305#ifdef __VSX__
13306static __inline__ vector signed long long __ATTRS_o_ai
13307vec_xor(vector signed long long __a, vector signed long long __b) {
13308 return __a ^ __b;
13309}
13310
13311static __inline__ vector signed long long __ATTRS_o_ai
13312vec_xor(vector bool long long __a, vector signed long long __b) {
13313 return (vector signed long long)__a ^ __b;
13314}
13315
13316static __inline__ vector signed long long __ATTRS_o_ai
13317vec_xor(vector signed long long __a, vector bool long long __b) {
13318 return __a ^ (vector signed long long)__b;
13319}
13320
13321static __inline__ vector unsigned long long __ATTRS_o_ai
13322vec_xor(vector unsigned long long __a, vector unsigned long long __b) {
13323 return __a ^ __b;
13324}
13325
13326static __inline__ vector unsigned long long __ATTRS_o_ai
13327vec_xor(vector bool long long __a, vector unsigned long long __b) {
13328 return (vector unsigned long long)__a ^ __b;
13329}
13330
13331static __inline__ vector unsigned long long __ATTRS_o_ai
13332vec_xor(vector unsigned long long __a, vector bool long long __b) {
13333 return __a ^ (vector unsigned long long)__b;
13334}
13335
13336static __inline__ vector bool long long __ATTRS_o_ai
13337vec_xor(vector bool long long __a, vector bool long long __b) {
13338 return __a ^ __b;
13339}
13340
13341static __inline__ vector double __ATTRS_o_ai vec_xor(vector double __a,
13342 vector double __b) {
13343 return (vector double)((vector unsigned long long)__a ^
13344 (vector unsigned long long)__b);
13345}
13346
13347static __inline__ vector double __ATTRS_o_ai
13348vec_xor(vector double __a, vector bool long long __b) {
13349 return (vector double)((vector unsigned long long)__a ^
13350 (vector unsigned long long)__b);
13351}
13352
13353static __inline__ vector double __ATTRS_o_ai vec_xor(vector bool long long __a,
13354 vector double __b) {
13355 return (vector double)((vector unsigned long long)__a ^
13356 (vector unsigned long long)__b);
13357}
13358#endif
13359
13360/* vec_vxor */
13361
13362static __inline__ vector signed char __ATTRS_o_ai
13363vec_vxor(vector signed char __a, vector signed char __b) {
13364 return __a ^ __b;
13365}
13366
13367static __inline__ vector signed char __ATTRS_o_ai
13368vec_vxor(vector bool char __a, vector signed char __b) {
13369 return (vector signed char)__a ^ __b;
13370}
13371
13372static __inline__ vector signed char __ATTRS_o_ai
13373vec_vxor(vector signed char __a, vector bool char __b) {
13374 return __a ^ (vector signed char)__b;
13375}
13376
13377static __inline__ vector unsigned char __ATTRS_o_ai
13378vec_vxor(vector unsigned char __a, vector unsigned char __b) {
13379 return __a ^ __b;
13380}
13381
13382static __inline__ vector unsigned char __ATTRS_o_ai
13383vec_vxor(vector bool char __a, vector unsigned char __b) {
13384 return (vector unsigned char)__a ^ __b;
13385}
13386
13387static __inline__ vector unsigned char __ATTRS_o_ai
13388vec_vxor(vector unsigned char __a, vector bool char __b) {
13389 return __a ^ (vector unsigned char)__b;
13390}
13391
13392static __inline__ vector bool char __ATTRS_o_ai vec_vxor(vector bool char __a,
13393 vector bool char __b) {
13394 return __a ^ __b;
13395}
13396
13397static __inline__ vector short __ATTRS_o_ai vec_vxor(vector short __a,
13398 vector short __b) {
13399 return __a ^ __b;
13400}
13401
13402static __inline__ vector short __ATTRS_o_ai vec_vxor(vector bool short __a,
13403 vector short __b) {
13404 return (vector short)__a ^ __b;
13405}
13406
13407static __inline__ vector short __ATTRS_o_ai vec_vxor(vector short __a,
13408 vector bool short __b) {
13409 return __a ^ (vector short)__b;
13410}
13411
13412static __inline__ vector unsigned short __ATTRS_o_ai
13413vec_vxor(vector unsigned short __a, vector unsigned short __b) {
13414 return __a ^ __b;
13415}
13416
13417static __inline__ vector unsigned short __ATTRS_o_ai
13418vec_vxor(vector bool short __a, vector unsigned short __b) {
13419 return (vector unsigned short)__a ^ __b;
13420}
13421
13422static __inline__ vector unsigned short __ATTRS_o_ai
13423vec_vxor(vector unsigned short __a, vector bool short __b) {
13424 return __a ^ (vector unsigned short)__b;
13425}
13426
13427static __inline__ vector bool short __ATTRS_o_ai
13428vec_vxor(vector bool short __a, vector bool short __b) {
13429 return __a ^ __b;
13430}
13431
13432static __inline__ vector int __ATTRS_o_ai vec_vxor(vector int __a,
13433 vector int __b) {
13434 return __a ^ __b;
13435}
13436
13437static __inline__ vector int __ATTRS_o_ai vec_vxor(vector bool int __a,
13438 vector int __b) {
13439 return (vector int)__a ^ __b;
13440}
13441
13442static __inline__ vector int __ATTRS_o_ai vec_vxor(vector int __a,
13443 vector bool int __b) {
13444 return __a ^ (vector int)__b;
13445}
13446
13447static __inline__ vector unsigned int __ATTRS_o_ai
13448vec_vxor(vector unsigned int __a, vector unsigned int __b) {
13449 return __a ^ __b;
13450}
13451
13452static __inline__ vector unsigned int __ATTRS_o_ai
13453vec_vxor(vector bool int __a, vector unsigned int __b) {
13454 return (vector unsigned int)__a ^ __b;
13455}
13456
13457static __inline__ vector unsigned int __ATTRS_o_ai
13458vec_vxor(vector unsigned int __a, vector bool int __b) {
13459 return __a ^ (vector unsigned int)__b;
13460}
13461
13462static __inline__ vector bool int __ATTRS_o_ai vec_vxor(vector bool int __a,
13463 vector bool int __b) {
13464 return __a ^ __b;
13465}
13466
13467static __inline__ vector float __ATTRS_o_ai vec_vxor(vector float __a,
13468 vector float __b) {
13469 vector unsigned int __res =
13470 (vector unsigned int)__a ^ (vector unsigned int)__b;
13471 return (vector float)__res;
13472}
13473
13474static __inline__ vector float __ATTRS_o_ai vec_vxor(vector bool int __a,
13475 vector float __b) {
13476 vector unsigned int __res =
13477 (vector unsigned int)__a ^ (vector unsigned int)__b;
13478 return (vector float)__res;
13479}
13480
13481static __inline__ vector float __ATTRS_o_ai vec_vxor(vector float __a,
13482 vector bool int __b) {
13483 vector unsigned int __res =
13484 (vector unsigned int)__a ^ (vector unsigned int)__b;
13485 return (vector float)__res;
13486}
13487
13488#ifdef __VSX__
13489static __inline__ vector signed long long __ATTRS_o_ai
13490vec_vxor(vector signed long long __a, vector signed long long __b) {
13491 return __a ^ __b;
13492}
13493
13494static __inline__ vector signed long long __ATTRS_o_ai
13495vec_vxor(vector bool long long __a, vector signed long long __b) {
13496 return (vector signed long long)__a ^ __b;
13497}
13498
13499static __inline__ vector signed long long __ATTRS_o_ai
13500vec_vxor(vector signed long long __a, vector bool long long __b) {
13501 return __a ^ (vector signed long long)__b;
13502}
13503
13504static __inline__ vector unsigned long long __ATTRS_o_ai
13505vec_vxor(vector unsigned long long __a, vector unsigned long long __b) {
13506 return __a ^ __b;
13507}
13508
13509static __inline__ vector unsigned long long __ATTRS_o_ai
13510vec_vxor(vector bool long long __a, vector unsigned long long __b) {
13511 return (vector unsigned long long)__a ^ __b;
13512}
13513
13514static __inline__ vector unsigned long long __ATTRS_o_ai
13515vec_vxor(vector unsigned long long __a, vector bool long long __b) {
13516 return __a ^ (vector unsigned long long)__b;
13517}
13518
13519static __inline__ vector bool long long __ATTRS_o_ai
13520vec_vxor(vector bool long long __a, vector bool long long __b) {
13521 return __a ^ __b;
13522}
13523#endif
13524
13525/* ------------------------ extensions for CBEA ----------------------------- */
13526
13527/* vec_extract */
13528
13529static __inline__ signed char __ATTRS_o_ai vec_extract(vector signed char __a,
13530 signed int __b) {
13531 return __a[__b & 0xf];
13532}
13533
13534static __inline__ unsigned char __ATTRS_o_ai
13535vec_extract(vector unsigned char __a, signed int __b) {
13536 return __a[__b & 0xf];
13537}
13538
13539static __inline__ unsigned char __ATTRS_o_ai vec_extract(vector bool char __a,
13540 signed int __b) {
13541 return __a[__b & 0xf];
13542}
13543
13544static __inline__ signed short __ATTRS_o_ai vec_extract(vector signed short __a,
13545 signed int __b) {
13546 return __a[__b & 0x7];
13547}
13548
13549static __inline__ unsigned short __ATTRS_o_ai
13550vec_extract(vector unsigned short __a, signed int __b) {
13551 return __a[__b & 0x7];
13552}
13553
13554static __inline__ unsigned short __ATTRS_o_ai vec_extract(vector bool short __a,
13555 signed int __b) {
13556 return __a[__b & 0x7];
13557}
13558
13559static __inline__ signed int __ATTRS_o_ai vec_extract(vector signed int __a,
13560 signed int __b) {
13561 return __a[__b & 0x3];
13562}
13563
13564static __inline__ unsigned int __ATTRS_o_ai vec_extract(vector unsigned int __a,
13565 signed int __b) {
13566 return __a[__b & 0x3];
13567}
13568
13569static __inline__ unsigned int __ATTRS_o_ai vec_extract(vector bool int __a,
13570 signed int __b) {
13571 return __a[__b & 0x3];
13572}
13573
13574#ifdef __VSX__
13575static __inline__ signed long long __ATTRS_o_ai
13576vec_extract(vector signed long long __a, signed int __b) {
13577 return __a[__b & 0x1];
13578}
13579
13580static __inline__ unsigned long long __ATTRS_o_ai
13581vec_extract(vector unsigned long long __a, signed int __b) {
13582 return __a[__b & 0x1];
13583}
13584
13585static __inline__ unsigned long long __ATTRS_o_ai
13586vec_extract(vector bool long long __a, signed int __b) {
13587 return __a[__b & 0x1];
13588}
13589
13590static __inline__ double __ATTRS_o_ai vec_extract(vector double __a,
13591 signed int __b) {
13592 return __a[__b & 0x1];
13593}
13594#endif
13595
13596static __inline__ float __ATTRS_o_ai vec_extract(vector float __a,
13597 signed int __b) {
13598 return __a[__b & 0x3];
13599}
13600
13601#ifdef __POWER9_VECTOR__
13602
13603#define vec_insert4b __builtin_vsx_insertword
13604#define vec_extract4b __builtin_vsx_extractuword
13605
13606/* vec_extract_exp */
13607
13608static __inline__ vector unsigned int __ATTRS_o_ai
13609vec_extract_exp(vector float __a) {
13610 return __builtin_vsx_xvxexpsp(__a);
13611}
13612
13613static __inline__ vector unsigned long long __ATTRS_o_ai
13614vec_extract_exp(vector double __a) {
13615 return __builtin_vsx_xvxexpdp(__a);
13616}
13617
13618/* vec_extract_sig */
13619
13620static __inline__ vector unsigned int __ATTRS_o_ai
13621vec_extract_sig(vector float __a) {
13622 return __builtin_vsx_xvxsigsp(__a);
13623}
13624
13625static __inline__ vector unsigned long long __ATTRS_o_ai
13626vec_extract_sig (vector double __a) {
13627 return __builtin_vsx_xvxsigdp(__a);
13628}
13629
13630static __inline__ vector float __ATTRS_o_ai
13631vec_extract_fp32_from_shorth(vector unsigned short __a) {
13632 vector unsigned short __b =
13633#ifdef __LITTLE_ENDIAN__
13634 __builtin_shufflevector(__a, __a, 0, -1, 1, -1, 2, -1, 3, -1);
13635#else
13636 __builtin_shufflevector(__a, __a, -1, 0, -1, 1, -1, 2, -1, 3);
13637#endif
13638 return __builtin_vsx_xvcvhpsp(__b);
13639}
13640
13641static __inline__ vector float __ATTRS_o_ai
13642vec_extract_fp32_from_shortl(vector unsigned short __a) {
13643 vector unsigned short __b =
13644#ifdef __LITTLE_ENDIAN__
13645 __builtin_shufflevector(__a, __a, 4, -1, 5, -1, 6, -1, 7, -1);
13646#else
13647 __builtin_shufflevector(__a, __a, -1, 4, -1, 5, -1, 6, -1, 7);
13648#endif
13649 return __builtin_vsx_xvcvhpsp(__b);
13650}
13651#endif /* __POWER9_VECTOR__ */
13652
13653/* vec_insert */
13654
13655static __inline__ vector signed char __ATTRS_o_ai
13656vec_insert(signed char __a, vector signed char __b, int __c) {
13657 __b[__c & 0xF] = __a;
13658 return __b;
13659}
13660
13661static __inline__ vector unsigned char __ATTRS_o_ai
13662vec_insert(unsigned char __a, vector unsigned char __b, int __c) {
13663 __b[__c & 0xF] = __a;
13664 return __b;
13665}
13666
13667static __inline__ vector bool char __ATTRS_o_ai vec_insert(unsigned char __a,
13668 vector bool char __b,
13669 int __c) {
13670 __b[__c & 0xF] = __a;
13671 return __b;
13672}
13673
13674static __inline__ vector signed short __ATTRS_o_ai
13675vec_insert(signed short __a, vector signed short __b, int __c) {
13676 __b[__c & 0x7] = __a;
13677 return __b;
13678}
13679
13680static __inline__ vector unsigned short __ATTRS_o_ai
13681vec_insert(unsigned short __a, vector unsigned short __b, int __c) {
13682 __b[__c & 0x7] = __a;
13683 return __b;
13684}
13685
13686static __inline__ vector bool short __ATTRS_o_ai
13687vec_insert(unsigned short __a, vector bool short __b, int __c) {
13688 __b[__c & 0x7] = __a;
13689 return __b;
13690}
13691
13692static __inline__ vector signed int __ATTRS_o_ai
13693vec_insert(signed int __a, vector signed int __b, int __c) {
13694 __b[__c & 0x3] = __a;
13695 return __b;
13696}
13697
13698static __inline__ vector unsigned int __ATTRS_o_ai
13699vec_insert(unsigned int __a, vector unsigned int __b, int __c) {
13700 __b[__c & 0x3] = __a;
13701 return __b;
13702}
13703
13704static __inline__ vector bool int __ATTRS_o_ai vec_insert(unsigned int __a,
13705 vector bool int __b,
13706 int __c) {
13707 __b[__c & 0x3] = __a;
13708 return __b;
13709}
13710
13711#ifdef __VSX__
13712static __inline__ vector signed long long __ATTRS_o_ai
13713vec_insert(signed long long __a, vector signed long long __b, int __c) {
13714 __b[__c & 0x1] = __a;
13715 return __b;
13716}
13717
13718static __inline__ vector unsigned long long __ATTRS_o_ai
13719vec_insert(unsigned long long __a, vector unsigned long long __b, int __c) {
13720 __b[__c & 0x1] = __a;
13721 return __b;
13722}
13723
13724static __inline__ vector bool long long __ATTRS_o_ai
13725vec_insert(unsigned long long __a, vector bool long long __b, int __c) {
13726 __b[__c & 0x1] = __a;
13727 return __b;
13728}
13729static __inline__ vector double __ATTRS_o_ai vec_insert(double __a,
13730 vector double __b,
13731 int __c) {
13732 __b[__c & 0x1] = __a;
13733 return __b;
13734}
13735#endif
13736
13737static __inline__ vector float __ATTRS_o_ai vec_insert(float __a,
13738 vector float __b,
13739 int __c) {
13740 __b[__c & 0x3] = __a;
13741 return __b;
13742}
13743
13744/* vec_lvlx */
13745
13746static __inline__ vector signed char __ATTRS_o_ai
13747vec_lvlx(int __a, const signed char *__b) {
13748 return vec_perm(vec_ld(__a, __b), (vector signed char)(0),
13749 vec_lvsl(__a, __b));
13750}
13751
13752static __inline__ vector signed char __ATTRS_o_ai
13753vec_lvlx(int __a, const vector signed char *__b) {
13754 return vec_perm(vec_ld(__a, __b), (vector signed char)(0),
13755 vec_lvsl(__a, (unsigned char *)__b));
13756}
13757
13758static __inline__ vector unsigned char __ATTRS_o_ai
13759vec_lvlx(int __a, const unsigned char *__b) {
13760 return vec_perm(vec_ld(__a, __b), (vector unsigned char)(0),
13761 vec_lvsl(__a, __b));
13762}
13763
13764static __inline__ vector unsigned char __ATTRS_o_ai
13765vec_lvlx(int __a, const vector unsigned char *__b) {
13766 return vec_perm(vec_ld(__a, __b), (vector unsigned char)(0),
13767 vec_lvsl(__a, (unsigned char *)__b));
13768}
13769
13770static __inline__ vector bool char __ATTRS_o_ai
13771vec_lvlx(int __a, const vector bool char *__b) {
13772 return vec_perm(vec_ld(__a, __b), (vector bool char)(0),
13773 vec_lvsl(__a, (unsigned char *)__b));
13774}
13775
13776static __inline__ vector short __ATTRS_o_ai vec_lvlx(int __a,
13777 const short *__b) {
13778 return vec_perm(vec_ld(__a, __b), (vector short)(0), vec_lvsl(__a, __b));
13779}
13780
13781static __inline__ vector short __ATTRS_o_ai vec_lvlx(int __a,
13782 const vector short *__b) {
13783 return vec_perm(vec_ld(__a, __b), (vector short)(0),
13784 vec_lvsl(__a, (unsigned char *)__b));
13785}
13786
13787static __inline__ vector unsigned short __ATTRS_o_ai
13788vec_lvlx(int __a, const unsigned short *__b) {
13789 return vec_perm(vec_ld(__a, __b), (vector unsigned short)(0),
13790 vec_lvsl(__a, __b));
13791}
13792
13793static __inline__ vector unsigned short __ATTRS_o_ai
13794vec_lvlx(int __a, const vector unsigned short *__b) {
13795 return vec_perm(vec_ld(__a, __b), (vector unsigned short)(0),
13796 vec_lvsl(__a, (unsigned char *)__b));
13797}
13798
13799static __inline__ vector bool short __ATTRS_o_ai
13800vec_lvlx(int __a, const vector bool short *__b) {
13801 return vec_perm(vec_ld(__a, __b), (vector bool short)(0),
13802 vec_lvsl(__a, (unsigned char *)__b));
13803}
13804
13805static __inline__ vector pixel __ATTRS_o_ai vec_lvlx(int __a,
13806 const vector pixel *__b) {
13807 return vec_perm(vec_ld(__a, __b), (vector pixel)(0),
13808 vec_lvsl(__a, (unsigned char *)__b));
13809}
13810
13811static __inline__ vector int __ATTRS_o_ai vec_lvlx(int __a, const int *__b) {
13812 return vec_perm(vec_ld(__a, __b), (vector int)(0), vec_lvsl(__a, __b));
13813}
13814
13815static __inline__ vector int __ATTRS_o_ai vec_lvlx(int __a,
13816 const vector int *__b) {
13817 return vec_perm(vec_ld(__a, __b), (vector int)(0),
13818 vec_lvsl(__a, (unsigned char *)__b));
13819}
13820
13821static __inline__ vector unsigned int __ATTRS_o_ai
13822vec_lvlx(int __a, const unsigned int *__b) {
13823 return vec_perm(vec_ld(__a, __b), (vector unsigned int)(0),
13824 vec_lvsl(__a, __b));
13825}
13826
13827static __inline__ vector unsigned int __ATTRS_o_ai
13828vec_lvlx(int __a, const vector unsigned int *__b) {
13829 return vec_perm(vec_ld(__a, __b), (vector unsigned int)(0),
13830 vec_lvsl(__a, (unsigned char *)__b));
13831}
13832
13833static __inline__ vector bool int __ATTRS_o_ai
13834vec_lvlx(int __a, const vector bool int *__b) {
13835 return vec_perm(vec_ld(__a, __b), (vector bool int)(0),
13836 vec_lvsl(__a, (unsigned char *)__b));
13837}
13838
13839static __inline__ vector float __ATTRS_o_ai vec_lvlx(int __a,
13840 const float *__b) {
13841 return vec_perm(vec_ld(__a, __b), (vector float)(0), vec_lvsl(__a, __b));
13842}
13843
13844static __inline__ vector float __ATTRS_o_ai vec_lvlx(int __a,
13845 const vector float *__b) {
13846 return vec_perm(vec_ld(__a, __b), (vector float)(0),
13847 vec_lvsl(__a, (unsigned char *)__b));
13848}
13849
13850/* vec_lvlxl */
13851
13852static __inline__ vector signed char __ATTRS_o_ai
13853vec_lvlxl(int __a, const signed char *__b) {
13854 return vec_perm(vec_ldl(__a, __b), (vector signed char)(0),
13855 vec_lvsl(__a, __b));
13856}
13857
13858static __inline__ vector signed char __ATTRS_o_ai
13859vec_lvlxl(int __a, const vector signed char *__b) {
13860 return vec_perm(vec_ldl(__a, __b), (vector signed char)(0),
13861 vec_lvsl(__a, (unsigned char *)__b));
13862}
13863
13864static __inline__ vector unsigned char __ATTRS_o_ai
13865vec_lvlxl(int __a, const unsigned char *__b) {
13866 return vec_perm(vec_ldl(__a, __b), (vector unsigned char)(0),
13867 vec_lvsl(__a, __b));
13868}
13869
13870static __inline__ vector unsigned char __ATTRS_o_ai
13871vec_lvlxl(int __a, const vector unsigned char *__b) {
13872 return vec_perm(vec_ldl(__a, __b), (vector unsigned char)(0),
13873 vec_lvsl(__a, (unsigned char *)__b));
13874}
13875
13876static __inline__ vector bool char __ATTRS_o_ai
13877vec_lvlxl(int __a, const vector bool char *__b) {
13878 return vec_perm(vec_ldl(__a, __b), (vector bool char)(0),
13879 vec_lvsl(__a, (unsigned char *)__b));
13880}
13881
13882static __inline__ vector short __ATTRS_o_ai vec_lvlxl(int __a,
13883 const short *__b) {
13884 return vec_perm(vec_ldl(__a, __b), (vector short)(0), vec_lvsl(__a, __b));
13885}
13886
13887static __inline__ vector short __ATTRS_o_ai vec_lvlxl(int __a,
13888 const vector short *__b) {
13889 return vec_perm(vec_ldl(__a, __b), (vector short)(0),
13890 vec_lvsl(__a, (unsigned char *)__b));
13891}
13892
13893static __inline__ vector unsigned short __ATTRS_o_ai
13894vec_lvlxl(int __a, const unsigned short *__b) {
13895 return vec_perm(vec_ldl(__a, __b), (vector unsigned short)(0),
13896 vec_lvsl(__a, __b));
13897}
13898
13899static __inline__ vector unsigned short __ATTRS_o_ai
13900vec_lvlxl(int __a, const vector unsigned short *__b) {
13901 return vec_perm(vec_ldl(__a, __b), (vector unsigned short)(0),
13902 vec_lvsl(__a, (unsigned char *)__b));
13903}
13904
13905static __inline__ vector bool short __ATTRS_o_ai
13906vec_lvlxl(int __a, const vector bool short *__b) {
13907 return vec_perm(vec_ldl(__a, __b), (vector bool short)(0),
13908 vec_lvsl(__a, (unsigned char *)__b));
13909}
13910
13911static __inline__ vector pixel __ATTRS_o_ai vec_lvlxl(int __a,
13912 const vector pixel *__b) {
13913 return vec_perm(vec_ldl(__a, __b), (vector pixel)(0),
13914 vec_lvsl(__a, (unsigned char *)__b));
13915}
13916
13917static __inline__ vector int __ATTRS_o_ai vec_lvlxl(int __a, const int *__b) {
13918 return vec_perm(vec_ldl(__a, __b), (vector int)(0), vec_lvsl(__a, __b));
13919}
13920
13921static __inline__ vector int __ATTRS_o_ai vec_lvlxl(int __a,
13922 const vector int *__b) {
13923 return vec_perm(vec_ldl(__a, __b), (vector int)(0),
13924 vec_lvsl(__a, (unsigned char *)__b));
13925}
13926
13927static __inline__ vector unsigned int __ATTRS_o_ai
13928vec_lvlxl(int __a, const unsigned int *__b) {
13929 return vec_perm(vec_ldl(__a, __b), (vector unsigned int)(0),
13930 vec_lvsl(__a, __b));
13931}
13932
13933static __inline__ vector unsigned int __ATTRS_o_ai
13934vec_lvlxl(int __a, const vector unsigned int *__b) {
13935 return vec_perm(vec_ldl(__a, __b), (vector unsigned int)(0),
13936 vec_lvsl(__a, (unsigned char *)__b));
13937}
13938
13939static __inline__ vector bool int __ATTRS_o_ai
13940vec_lvlxl(int __a, const vector bool int *__b) {
13941 return vec_perm(vec_ldl(__a, __b), (vector bool int)(0),
13942 vec_lvsl(__a, (unsigned char *)__b));
13943}
13944
13945static __inline__ vector float __ATTRS_o_ai vec_lvlxl(int __a,
13946 const float *__b) {
13947 return vec_perm(vec_ldl(__a, __b), (vector float)(0), vec_lvsl(__a, __b));
13948}
13949
13950static __inline__ vector float __ATTRS_o_ai vec_lvlxl(int __a,
13951 vector float *__b) {
13952 return vec_perm(vec_ldl(__a, __b), (vector float)(0),
13953 vec_lvsl(__a, (unsigned char *)__b));
13954}
13955
13956/* vec_lvrx */
13957
13958static __inline__ vector signed char __ATTRS_o_ai
13959vec_lvrx(int __a, const signed char *__b) {
13960 return vec_perm((vector signed char)(0), vec_ld(__a, __b),
13961 vec_lvsl(__a, __b));
13962}
13963
13964static __inline__ vector signed char __ATTRS_o_ai
13965vec_lvrx(int __a, const vector signed char *__b) {
13966 return vec_perm((vector signed char)(0), vec_ld(__a, __b),
13967 vec_lvsl(__a, (unsigned char *)__b));
13968}
13969
13970static __inline__ vector unsigned char __ATTRS_o_ai
13971vec_lvrx(int __a, const unsigned char *__b) {
13972 return vec_perm((vector unsigned char)(0), vec_ld(__a, __b),
13973 vec_lvsl(__a, __b));
13974}
13975
13976static __inline__ vector unsigned char __ATTRS_o_ai
13977vec_lvrx(int __a, const vector unsigned char *__b) {
13978 return vec_perm((vector unsigned char)(0), vec_ld(__a, __b),
13979 vec_lvsl(__a, (unsigned char *)__b));
13980}
13981
13982static __inline__ vector bool char __ATTRS_o_ai
13983vec_lvrx(int __a, const vector bool char *__b) {
13984 return vec_perm((vector bool char)(0), vec_ld(__a, __b),
13985 vec_lvsl(__a, (unsigned char *)__b));
13986}
13987
13988static __inline__ vector short __ATTRS_o_ai vec_lvrx(int __a,
13989 const short *__b) {
13990 return vec_perm((vector short)(0), vec_ld(__a, __b), vec_lvsl(__a, __b));
13991}
13992
13993static __inline__ vector short __ATTRS_o_ai vec_lvrx(int __a,
13994 const vector short *__b) {
13995 return vec_perm((vector short)(0), vec_ld(__a, __b),
13996 vec_lvsl(__a, (unsigned char *)__b));
13997}
13998
13999static __inline__ vector unsigned short __ATTRS_o_ai
14000vec_lvrx(int __a, const unsigned short *__b) {
14001 return vec_perm((vector unsigned short)(0), vec_ld(__a, __b),
14002 vec_lvsl(__a, __b));
14003}
14004
14005static __inline__ vector unsigned short __ATTRS_o_ai
14006vec_lvrx(int __a, const vector unsigned short *__b) {
14007 return vec_perm((vector unsigned short)(0), vec_ld(__a, __b),
14008 vec_lvsl(__a, (unsigned char *)__b));
14009}
14010
14011static __inline__ vector bool short __ATTRS_o_ai
14012vec_lvrx(int __a, const vector bool short *__b) {
14013 return vec_perm((vector bool short)(0), vec_ld(__a, __b),
14014 vec_lvsl(__a, (unsigned char *)__b));
14015}
14016
14017static __inline__ vector pixel __ATTRS_o_ai vec_lvrx(int __a,
14018 const vector pixel *__b) {
14019 return vec_perm((vector pixel)(0), vec_ld(__a, __b),
14020 vec_lvsl(__a, (unsigned char *)__b));
14021}
14022
14023static __inline__ vector int __ATTRS_o_ai vec_lvrx(int __a, const int *__b) {
14024 return vec_perm((vector int)(0), vec_ld(__a, __b), vec_lvsl(__a, __b));
14025}
14026
14027static __inline__ vector int __ATTRS_o_ai vec_lvrx(int __a,
14028 const vector int *__b) {
14029 return vec_perm((vector int)(0), vec_ld(__a, __b),
14030 vec_lvsl(__a, (unsigned char *)__b));
14031}
14032
14033static __inline__ vector unsigned int __ATTRS_o_ai
14034vec_lvrx(int __a, const unsigned int *__b) {
14035 return vec_perm((vector unsigned int)(0), vec_ld(__a, __b),
14036 vec_lvsl(__a, __b));
14037}
14038
14039static __inline__ vector unsigned int __ATTRS_o_ai
14040vec_lvrx(int __a, const vector unsigned int *__b) {
14041 return vec_perm((vector unsigned int)(0), vec_ld(__a, __b),
14042 vec_lvsl(__a, (unsigned char *)__b));
14043}
14044
14045static __inline__ vector bool int __ATTRS_o_ai
14046vec_lvrx(int __a, const vector bool int *__b) {
14047 return vec_perm((vector bool int)(0), vec_ld(__a, __b),
14048 vec_lvsl(__a, (unsigned char *)__b));
14049}
14050
14051static __inline__ vector float __ATTRS_o_ai vec_lvrx(int __a,
14052 const float *__b) {
14053 return vec_perm((vector float)(0), vec_ld(__a, __b), vec_lvsl(__a, __b));
14054}
14055
14056static __inline__ vector float __ATTRS_o_ai vec_lvrx(int __a,
14057 const vector float *__b) {
14058 return vec_perm((vector float)(0), vec_ld(__a, __b),
14059 vec_lvsl(__a, (unsigned char *)__b));
14060}
14061
14062/* vec_lvrxl */
14063
14064static __inline__ vector signed char __ATTRS_o_ai
14065vec_lvrxl(int __a, const signed char *__b) {
14066 return vec_perm((vector signed char)(0), vec_ldl(__a, __b),
14067 vec_lvsl(__a, __b));
14068}
14069
14070static __inline__ vector signed char __ATTRS_o_ai
14071vec_lvrxl(int __a, const vector signed char *__b) {
14072 return vec_perm((vector signed char)(0), vec_ldl(__a, __b),
14073 vec_lvsl(__a, (unsigned char *)__b));
14074}
14075
14076static __inline__ vector unsigned char __ATTRS_o_ai
14077vec_lvrxl(int __a, const unsigned char *__b) {
14078 return vec_perm((vector unsigned char)(0), vec_ldl(__a, __b),
14079 vec_lvsl(__a, __b));
14080}
14081
14082static __inline__ vector unsigned char __ATTRS_o_ai
14083vec_lvrxl(int __a, const vector unsigned char *__b) {
14084 return vec_perm((vector unsigned char)(0), vec_ldl(__a, __b),
14085 vec_lvsl(__a, (unsigned char *)__b));
14086}
14087
14088static __inline__ vector bool char __ATTRS_o_ai
14089vec_lvrxl(int __a, const vector bool char *__b) {
14090 return vec_perm((vector bool char)(0), vec_ldl(__a, __b),
14091 vec_lvsl(__a, (unsigned char *)__b));
14092}
14093
14094static __inline__ vector short __ATTRS_o_ai vec_lvrxl(int __a,
14095 const short *__b) {
14096 return vec_perm((vector short)(0), vec_ldl(__a, __b), vec_lvsl(__a, __b));
14097}
14098
14099static __inline__ vector short __ATTRS_o_ai vec_lvrxl(int __a,
14100 const vector short *__b) {
14101 return vec_perm((vector short)(0), vec_ldl(__a, __b),
14102 vec_lvsl(__a, (unsigned char *)__b));
14103}
14104
14105static __inline__ vector unsigned short __ATTRS_o_ai
14106vec_lvrxl(int __a, const unsigned short *__b) {
14107 return vec_perm((vector unsigned short)(0), vec_ldl(__a, __b),
14108 vec_lvsl(__a, __b));
14109}
14110
14111static __inline__ vector unsigned short __ATTRS_o_ai
14112vec_lvrxl(int __a, const vector unsigned short *__b) {
14113 return vec_perm((vector unsigned short)(0), vec_ldl(__a, __b),
14114 vec_lvsl(__a, (unsigned char *)__b));
14115}
14116
14117static __inline__ vector bool short __ATTRS_o_ai
14118vec_lvrxl(int __a, const vector bool short *__b) {
14119 return vec_perm((vector bool short)(0), vec_ldl(__a, __b),
14120 vec_lvsl(__a, (unsigned char *)__b));
14121}
14122
14123static __inline__ vector pixel __ATTRS_o_ai vec_lvrxl(int __a,
14124 const vector pixel *__b) {
14125 return vec_perm((vector pixel)(0), vec_ldl(__a, __b),
14126 vec_lvsl(__a, (unsigned char *)__b));
14127}
14128
14129static __inline__ vector int __ATTRS_o_ai vec_lvrxl(int __a, const int *__b) {
14130 return vec_perm((vector int)(0), vec_ldl(__a, __b), vec_lvsl(__a, __b));
14131}
14132
14133static __inline__ vector int __ATTRS_o_ai vec_lvrxl(int __a,
14134 const vector int *__b) {
14135 return vec_perm((vector int)(0), vec_ldl(__a, __b),
14136 vec_lvsl(__a, (unsigned char *)__b));
14137}
14138
14139static __inline__ vector unsigned int __ATTRS_o_ai
14140vec_lvrxl(int __a, const unsigned int *__b) {
14141 return vec_perm((vector unsigned int)(0), vec_ldl(__a, __b),
14142 vec_lvsl(__a, __b));
14143}
14144
14145static __inline__ vector unsigned int __ATTRS_o_ai
14146vec_lvrxl(int __a, const vector unsigned int *__b) {
14147 return vec_perm((vector unsigned int)(0), vec_ldl(__a, __b),
14148 vec_lvsl(__a, (unsigned char *)__b));
14149}
14150
14151static __inline__ vector bool int __ATTRS_o_ai
14152vec_lvrxl(int __a, const vector bool int *__b) {
14153 return vec_perm((vector bool int)(0), vec_ldl(__a, __b),
14154 vec_lvsl(__a, (unsigned char *)__b));
14155}
14156
14157static __inline__ vector float __ATTRS_o_ai vec_lvrxl(int __a,
14158 const float *__b) {
14159 return vec_perm((vector float)(0), vec_ldl(__a, __b), vec_lvsl(__a, __b));
14160}
14161
14162static __inline__ vector float __ATTRS_o_ai vec_lvrxl(int __a,
14163 const vector float *__b) {
14164 return vec_perm((vector float)(0), vec_ldl(__a, __b),
14165 vec_lvsl(__a, (unsigned char *)__b));
14166}
14167
14168/* vec_stvlx */
14169
14170static __inline__ void __ATTRS_o_ai vec_stvlx(vector signed char __a, int __b,
14171 signed char *__c) {
14173 __c);
14174}
14175
14176static __inline__ void __ATTRS_o_ai vec_stvlx(vector signed char __a, int __b,
14177 vector signed char *__c) {
14178 return vec_st(
14179 vec_perm(vec_lvrx(__b, __c), __a, vec_lvsr(__b, (unsigned char *)__c)),
14180 __b, __c);
14181}
14182
14183static __inline__ void __ATTRS_o_ai vec_stvlx(vector unsigned char __a, int __b,
14184 unsigned char *__c) {
14186 __c);
14187}
14188
14189static __inline__ void __ATTRS_o_ai vec_stvlx(vector unsigned char __a, int __b,
14190 vector unsigned char *__c) {
14191 return vec_st(
14192 vec_perm(vec_lvrx(__b, __c), __a, vec_lvsr(__b, (unsigned char *)__c)),
14193 __b, __c);
14194}
14195
14196static __inline__ void __ATTRS_o_ai vec_stvlx(vector bool char __a, int __b,
14197 vector bool char *__c) {
14198 return vec_st(
14199 vec_perm(vec_lvrx(__b, __c), __a, vec_lvsr(__b, (unsigned char *)__c)),
14200 __b, __c);
14201}
14202
14203static __inline__ void __ATTRS_o_ai vec_stvlx(vector short __a, int __b,
14204 short *__c) {
14206 __c);
14207}
14208
14209static __inline__ void __ATTRS_o_ai vec_stvlx(vector short __a, int __b,
14210 vector short *__c) {
14211 return vec_st(
14212 vec_perm(vec_lvrx(__b, __c), __a, vec_lvsr(__b, (unsigned char *)__c)),
14213 __b, __c);
14214}
14215
14216static __inline__ void __ATTRS_o_ai vec_stvlx(vector unsigned short __a,
14217 int __b, unsigned short *__c) {
14219 __c);
14220}
14221
14222static __inline__ void __ATTRS_o_ai vec_stvlx(vector unsigned short __a,
14223 int __b,
14224 vector unsigned short *__c) {
14225 return vec_st(
14226 vec_perm(vec_lvrx(__b, __c), __a, vec_lvsr(__b, (unsigned char *)__c)),
14227 __b, __c);
14228}
14229
14230static __inline__ void __ATTRS_o_ai vec_stvlx(vector bool short __a, int __b,
14231 vector bool short *__c) {
14232 return vec_st(
14233 vec_perm(vec_lvrx(__b, __c), __a, vec_lvsr(__b, (unsigned char *)__c)),
14234 __b, __c);
14235}
14236
14237static __inline__ void __ATTRS_o_ai vec_stvlx(vector pixel __a, int __b,
14238 vector pixel *__c) {
14239 return vec_st(
14240 vec_perm(vec_lvrx(__b, __c), __a, vec_lvsr(__b, (unsigned char *)__c)),
14241 __b, __c);
14242}
14243
14244static __inline__ void __ATTRS_o_ai vec_stvlx(vector int __a, int __b,
14245 int *__c) {
14247 __c);
14248}
14249
14250static __inline__ void __ATTRS_o_ai vec_stvlx(vector int __a, int __b,
14251 vector int *__c) {
14252 return vec_st(
14253 vec_perm(vec_lvrx(__b, __c), __a, vec_lvsr(__b, (unsigned char *)__c)),
14254 __b, __c);
14255}
14256
14257static __inline__ void __ATTRS_o_ai vec_stvlx(vector unsigned int __a, int __b,
14258 unsigned int *__c) {
14260 __c);
14261}
14262
14263static __inline__ void __ATTRS_o_ai vec_stvlx(vector unsigned int __a, int __b,
14264 vector unsigned int *__c) {
14265 return vec_st(
14266 vec_perm(vec_lvrx(__b, __c), __a, vec_lvsr(__b, (unsigned char *)__c)),
14267 __b, __c);
14268}
14269
14270static __inline__ void __ATTRS_o_ai vec_stvlx(vector bool int __a, int __b,
14271 vector bool int *__c) {
14272 return vec_st(
14273 vec_perm(vec_lvrx(__b, __c), __a, vec_lvsr(__b, (unsigned char *)__c)),
14274 __b, __c);
14275}
14276
14277static __inline__ void __ATTRS_o_ai vec_stvlx(vector float __a, int __b,
14278 vector float *__c) {
14279 return vec_st(
14280 vec_perm(vec_lvrx(__b, __c), __a, vec_lvsr(__b, (unsigned char *)__c)),
14281 __b, __c);
14282}
14283
14284/* vec_stvlxl */
14285
14286static __inline__ void __ATTRS_o_ai vec_stvlxl(vector signed char __a, int __b,
14287 signed char *__c) {
14289 __c);
14290}
14291
14292static __inline__ void __ATTRS_o_ai vec_stvlxl(vector signed char __a, int __b,
14293 vector signed char *__c) {
14294 return vec_stl(
14295 vec_perm(vec_lvrx(__b, __c), __a, vec_lvsr(__b, (unsigned char *)__c)),
14296 __b, __c);
14297}
14298
14299static __inline__ void __ATTRS_o_ai vec_stvlxl(vector unsigned char __a,
14300 int __b, unsigned char *__c) {
14302 __c);
14303}
14304
14305static __inline__ void __ATTRS_o_ai vec_stvlxl(vector unsigned char __a,
14306 int __b,
14307 vector unsigned char *__c) {
14308 return vec_stl(
14309 vec_perm(vec_lvrx(__b, __c), __a, vec_lvsr(__b, (unsigned char *)__c)),
14310 __b, __c);
14311}
14312
14313static __inline__ void __ATTRS_o_ai vec_stvlxl(vector bool char __a, int __b,
14314 vector bool char *__c) {
14315 return vec_stl(
14316 vec_perm(vec_lvrx(__b, __c), __a, vec_lvsr(__b, (unsigned char *)__c)),
14317 __b, __c);
14318}
14319
14320static __inline__ void __ATTRS_o_ai vec_stvlxl(vector short __a, int __b,
14321 short *__c) {
14323 __c);
14324}
14325
14326static __inline__ void __ATTRS_o_ai vec_stvlxl(vector short __a, int __b,
14327 vector short *__c) {
14328 return vec_stl(
14329 vec_perm(vec_lvrx(__b, __c), __a, vec_lvsr(__b, (unsigned char *)__c)),
14330 __b, __c);
14331}
14332
14333static __inline__ void __ATTRS_o_ai vec_stvlxl(vector unsigned short __a,
14334 int __b, unsigned short *__c) {
14336 __c);
14337}
14338
14339static __inline__ void __ATTRS_o_ai vec_stvlxl(vector unsigned short __a,
14340 int __b,
14341 vector unsigned short *__c) {
14342 return vec_stl(
14343 vec_perm(vec_lvrx(__b, __c), __a, vec_lvsr(__b, (unsigned char *)__c)),
14344 __b, __c);
14345}
14346
14347static __inline__ void __ATTRS_o_ai vec_stvlxl(vector bool short __a, int __b,
14348 vector bool short *__c) {
14349 return vec_stl(
14350 vec_perm(vec_lvrx(__b, __c), __a, vec_lvsr(__b, (unsigned char *)__c)),
14351 __b, __c);
14352}
14353
14354static __inline__ void __ATTRS_o_ai vec_stvlxl(vector pixel __a, int __b,
14355 vector pixel *__c) {
14356 return vec_stl(
14357 vec_perm(vec_lvrx(__b, __c), __a, vec_lvsr(__b, (unsigned char *)__c)),
14358 __b, __c);
14359}
14360
14361static __inline__ void __ATTRS_o_ai vec_stvlxl(vector int __a, int __b,
14362 int *__c) {
14364 __c);
14365}
14366
14367static __inline__ void __ATTRS_o_ai vec_stvlxl(vector int __a, int __b,
14368 vector int *__c) {
14369 return vec_stl(
14370 vec_perm(vec_lvrx(__b, __c), __a, vec_lvsr(__b, (unsigned char *)__c)),
14371 __b, __c);
14372}
14373
14374static __inline__ void __ATTRS_o_ai vec_stvlxl(vector unsigned int __a, int __b,
14375 unsigned int *__c) {
14377 __c);
14378}
14379
14380static __inline__ void __ATTRS_o_ai vec_stvlxl(vector unsigned int __a, int __b,
14381 vector unsigned int *__c) {
14382 return vec_stl(
14383 vec_perm(vec_lvrx(__b, __c), __a, vec_lvsr(__b, (unsigned char *)__c)),
14384 __b, __c);
14385}
14386
14387static __inline__ void __ATTRS_o_ai vec_stvlxl(vector bool int __a, int __b,
14388 vector bool int *__c) {
14389 return vec_stl(
14390 vec_perm(vec_lvrx(__b, __c), __a, vec_lvsr(__b, (unsigned char *)__c)),
14391 __b, __c);
14392}
14393
14394static __inline__ void __ATTRS_o_ai vec_stvlxl(vector float __a, int __b,
14395 vector float *__c) {
14396 return vec_stl(
14397 vec_perm(vec_lvrx(__b, __c), __a, vec_lvsr(__b, (unsigned char *)__c)),
14398 __b, __c);
14399}
14400
14401/* vec_stvrx */
14402
14403static __inline__ void __ATTRS_o_ai vec_stvrx(vector signed char __a, int __b,
14404 signed char *__c) {
14406 __c);
14407}
14408
14409static __inline__ void __ATTRS_o_ai vec_stvrx(vector signed char __a, int __b,
14410 vector signed char *__c) {
14411 return vec_st(
14412 vec_perm(__a, vec_lvlx(__b, __c), vec_lvsr(__b, (unsigned char *)__c)),
14413 __b, __c);
14414}
14415
14416static __inline__ void __ATTRS_o_ai vec_stvrx(vector unsigned char __a, int __b,
14417 unsigned char *__c) {
14419 __c);
14420}
14421
14422static __inline__ void __ATTRS_o_ai vec_stvrx(vector unsigned char __a, int __b,
14423 vector unsigned char *__c) {
14424 return vec_st(
14425 vec_perm(__a, vec_lvlx(__b, __c), vec_lvsr(__b, (unsigned char *)__c)),
14426 __b, __c);
14427}
14428
14429static __inline__ void __ATTRS_o_ai vec_stvrx(vector bool char __a, int __b,
14430 vector bool char *__c) {
14431 return vec_st(
14432 vec_perm(__a, vec_lvlx(__b, __c), vec_lvsr(__b, (unsigned char *)__c)),
14433 __b, __c);
14434}
14435
14436static __inline__ void __ATTRS_o_ai vec_stvrx(vector short __a, int __b,
14437 short *__c) {
14439 __c);
14440}
14441
14442static __inline__ void __ATTRS_o_ai vec_stvrx(vector short __a, int __b,
14443 vector short *__c) {
14444 return vec_st(
14445 vec_perm(__a, vec_lvlx(__b, __c), vec_lvsr(__b, (unsigned char *)__c)),
14446 __b, __c);
14447}
14448
14449static __inline__ void __ATTRS_o_ai vec_stvrx(vector unsigned short __a,
14450 int __b, unsigned short *__c) {
14452 __c);
14453}
14454
14455static __inline__ void __ATTRS_o_ai vec_stvrx(vector unsigned short __a,
14456 int __b,
14457 vector unsigned short *__c) {
14458 return vec_st(
14459 vec_perm(__a, vec_lvlx(__b, __c), vec_lvsr(__b, (unsigned char *)__c)),
14460 __b, __c);
14461}
14462
14463static __inline__ void __ATTRS_o_ai vec_stvrx(vector bool short __a, int __b,
14464 vector bool short *__c) {
14465 return vec_st(
14466 vec_perm(__a, vec_lvlx(__b, __c), vec_lvsr(__b, (unsigned char *)__c)),
14467 __b, __c);
14468}
14469
14470static __inline__ void __ATTRS_o_ai vec_stvrx(vector pixel __a, int __b,
14471 vector pixel *__c) {
14472 return vec_st(
14473 vec_perm(__a, vec_lvlx(__b, __c), vec_lvsr(__b, (unsigned char *)__c)),
14474 __b, __c);
14475}
14476
14477static __inline__ void __ATTRS_o_ai vec_stvrx(vector int __a, int __b,
14478 int *__c) {
14480 __c);
14481}
14482
14483static __inline__ void __ATTRS_o_ai vec_stvrx(vector int __a, int __b,
14484 vector int *__c) {
14485 return vec_st(
14486 vec_perm(__a, vec_lvlx(__b, __c), vec_lvsr(__b, (unsigned char *)__c)),
14487 __b, __c);
14488}
14489
14490static __inline__ void __ATTRS_o_ai vec_stvrx(vector unsigned int __a, int __b,
14491 unsigned int *__c) {
14493 __c);
14494}
14495
14496static __inline__ void __ATTRS_o_ai vec_stvrx(vector unsigned int __a, int __b,
14497 vector unsigned int *__c) {
14498 return vec_st(
14499 vec_perm(__a, vec_lvlx(__b, __c), vec_lvsr(__b, (unsigned char *)__c)),
14500 __b, __c);
14501}
14502
14503static __inline__ void __ATTRS_o_ai vec_stvrx(vector bool int __a, int __b,
14504 vector bool int *__c) {
14505 return vec_st(
14506 vec_perm(__a, vec_lvlx(__b, __c), vec_lvsr(__b, (unsigned char *)__c)),
14507 __b, __c);
14508}
14509
14510static __inline__ void __ATTRS_o_ai vec_stvrx(vector float __a, int __b,
14511 vector float *__c) {
14512 return vec_st(
14513 vec_perm(__a, vec_lvlx(__b, __c), vec_lvsr(__b, (unsigned char *)__c)),
14514 __b, __c);
14515}
14516
14517/* vec_stvrxl */
14518
14519static __inline__ void __ATTRS_o_ai vec_stvrxl(vector signed char __a, int __b,
14520 signed char *__c) {
14522 __c);
14523}
14524
14525static __inline__ void __ATTRS_o_ai vec_stvrxl(vector signed char __a, int __b,
14526 vector signed char *__c) {
14527 return vec_stl(
14528 vec_perm(__a, vec_lvlx(__b, __c), vec_lvsr(__b, (unsigned char *)__c)),
14529 __b, __c);
14530}
14531
14532static __inline__ void __ATTRS_o_ai vec_stvrxl(vector unsigned char __a,
14533 int __b, unsigned char *__c) {
14535 __c);
14536}
14537
14538static __inline__ void __ATTRS_o_ai vec_stvrxl(vector unsigned char __a,
14539 int __b,
14540 vector unsigned char *__c) {
14541 return vec_stl(
14542 vec_perm(__a, vec_lvlx(__b, __c), vec_lvsr(__b, (unsigned char *)__c)),
14543 __b, __c);
14544}
14545
14546static __inline__ void __ATTRS_o_ai vec_stvrxl(vector bool char __a, int __b,
14547 vector bool char *__c) {
14548 return vec_stl(
14549 vec_perm(__a, vec_lvlx(__b, __c), vec_lvsr(__b, (unsigned char *)__c)),
14550 __b, __c);
14551}
14552
14553static __inline__ void __ATTRS_o_ai vec_stvrxl(vector short __a, int __b,
14554 short *__c) {
14556 __c);
14557}
14558
14559static __inline__ void __ATTRS_o_ai vec_stvrxl(vector short __a, int __b,
14560 vector short *__c) {
14561 return vec_stl(
14562 vec_perm(__a, vec_lvlx(__b, __c), vec_lvsr(__b, (unsigned char *)__c)),
14563 __b, __c);
14564}
14565
14566static __inline__ void __ATTRS_o_ai vec_stvrxl(vector unsigned short __a,
14567 int __b, unsigned short *__c) {
14569 __c);
14570}
14571
14572static __inline__ void __ATTRS_o_ai vec_stvrxl(vector unsigned short __a,
14573 int __b,
14574 vector unsigned short *__c) {
14575 return vec_stl(
14576 vec_perm(__a, vec_lvlx(__b, __c), vec_lvsr(__b, (unsigned char *)__c)),
14577 __b, __c);
14578}
14579
14580static __inline__ void __ATTRS_o_ai vec_stvrxl(vector bool short __a, int __b,
14581 vector bool short *__c) {
14582 return vec_stl(
14583 vec_perm(__a, vec_lvlx(__b, __c), vec_lvsr(__b, (unsigned char *)__c)),
14584 __b, __c);
14585}
14586
14587static __inline__ void __ATTRS_o_ai vec_stvrxl(vector pixel __a, int __b,
14588 vector pixel *__c) {
14589 return vec_stl(
14590 vec_perm(__a, vec_lvlx(__b, __c), vec_lvsr(__b, (unsigned char *)__c)),
14591 __b, __c);
14592}
14593
14594static __inline__ void __ATTRS_o_ai vec_stvrxl(vector int __a, int __b,
14595 int *__c) {
14597 __c);
14598}
14599
14600static __inline__ void __ATTRS_o_ai vec_stvrxl(vector int __a, int __b,
14601 vector int *__c) {
14602 return vec_stl(
14603 vec_perm(__a, vec_lvlx(__b, __c), vec_lvsr(__b, (unsigned char *)__c)),
14604 __b, __c);
14605}
14606
14607static __inline__ void __ATTRS_o_ai vec_stvrxl(vector unsigned int __a, int __b,
14608 unsigned int *__c) {
14610 __c);
14611}
14612
14613static __inline__ void __ATTRS_o_ai vec_stvrxl(vector unsigned int __a, int __b,
14614 vector unsigned int *__c) {
14615 return vec_stl(
14616 vec_perm(__a, vec_lvlx(__b, __c), vec_lvsr(__b, (unsigned char *)__c)),
14617 __b, __c);
14618}
14619
14620static __inline__ void __ATTRS_o_ai vec_stvrxl(vector bool int __a, int __b,
14621 vector bool int *__c) {
14622 return vec_stl(
14623 vec_perm(__a, vec_lvlx(__b, __c), vec_lvsr(__b, (unsigned char *)__c)),
14624 __b, __c);
14625}
14626
14627static __inline__ void __ATTRS_o_ai vec_stvrxl(vector float __a, int __b,
14628 vector float *__c) {
14629 return vec_stl(
14630 vec_perm(__a, vec_lvlx(__b, __c), vec_lvsr(__b, (unsigned char *)__c)),
14631 __b, __c);
14632}
14633
14634/* vec_promote */
14635
14636static __inline__ vector signed char __ATTRS_o_ai vec_promote(signed char __a,
14637 int __b) {
14638 vector signed char __res = (vector signed char)(0);
14639 __res[__b & 0x7] = __a;
14640 return __res;
14641}
14642
14643static __inline__ vector unsigned char __ATTRS_o_ai
14644vec_promote(unsigned char __a, int __b) {
14645 vector unsigned char __res = (vector unsigned char)(0);
14646 __res[__b & 0x7] = __a;
14647 return __res;
14648}
14649
14650static __inline__ vector short __ATTRS_o_ai vec_promote(short __a, int __b) {
14651 vector short __res = (vector short)(0);
14652 __res[__b & 0x7] = __a;
14653 return __res;
14654}
14655
14656static __inline__ vector unsigned short __ATTRS_o_ai
14657vec_promote(unsigned short __a, int __b) {
14658 vector unsigned short __res = (vector unsigned short)(0);
14659 __res[__b & 0x7] = __a;
14660 return __res;
14661}
14662
14663static __inline__ vector int __ATTRS_o_ai vec_promote(int __a, int __b) {
14664 vector int __res = (vector int)(0);
14665 __res[__b & 0x3] = __a;
14666 return __res;
14667}
14668
14669static __inline__ vector unsigned int __ATTRS_o_ai vec_promote(unsigned int __a,
14670 int __b) {
14671 vector unsigned int __res = (vector unsigned int)(0);
14672 __res[__b & 0x3] = __a;
14673 return __res;
14674}
14675
14676static __inline__ vector float __ATTRS_o_ai vec_promote(float __a, int __b) {
14677 vector float __res = (vector float)(0);
14678 __res[__b & 0x3] = __a;
14679 return __res;
14680}
14681
14682#ifdef __VSX__
14683static __inline__ vector double __ATTRS_o_ai vec_promote(double __a, int __b) {
14684 vector double __res = (vector double)(0);
14685 __res[__b & 0x1] = __a;
14686 return __res;
14687}
14688
14689static __inline__ vector signed long long __ATTRS_o_ai
14690vec_promote(signed long long __a, int __b) {
14691 vector signed long long __res = (vector signed long long)(0);
14692 __res[__b & 0x1] = __a;
14693 return __res;
14694}
14695
14696static __inline__ vector unsigned long long __ATTRS_o_ai
14697vec_promote(unsigned long long __a, int __b) {
14698 vector unsigned long long __res = (vector unsigned long long)(0);
14699 __res[__b & 0x1] = __a;
14700 return __res;
14701}
14702#endif
14703
14704/* vec_splats */
14705
14706static __inline__ vector signed char __ATTRS_o_ai vec_splats(signed char __a) {
14707 return (vector signed char)(__a);
14708}
14709
14710static __inline__ vector unsigned char __ATTRS_o_ai
14711vec_splats(unsigned char __a) {
14712 return (vector unsigned char)(__a);
14713}
14714
14715static __inline__ vector short __ATTRS_o_ai vec_splats(short __a) {
14716 return (vector short)(__a);
14717}
14718
14719static __inline__ vector unsigned short __ATTRS_o_ai
14720vec_splats(unsigned short __a) {
14721 return (vector unsigned short)(__a);
14722}
14723
14724static __inline__ vector int __ATTRS_o_ai vec_splats(int __a) {
14725 return (vector int)(__a);
14726}
14727
14728static __inline__ vector unsigned int __ATTRS_o_ai
14729vec_splats(unsigned int __a) {
14730 return (vector unsigned int)(__a);
14731}
14732
14733#ifdef __VSX__
14734static __inline__ vector signed long long __ATTRS_o_ai
14735vec_splats(signed long long __a) {
14736 return (vector signed long long)(__a);
14737}
14738
14739static __inline__ vector unsigned long long __ATTRS_o_ai
14740vec_splats(unsigned long long __a) {
14741 return (vector unsigned long long)(__a);
14742}
14743
14744#if defined(__POWER8_VECTOR__) && defined(__powerpc64__) && \
14745 defined(__SIZEOF_INT128__)
14746static __inline__ vector signed __int128 __ATTRS_o_ai
14747vec_splats(signed __int128 __a) {
14748 return (vector signed __int128)(__a);
14749}
14750
14751static __inline__ vector unsigned __int128 __ATTRS_o_ai
14752vec_splats(unsigned __int128 __a) {
14753 return (vector unsigned __int128)(__a);
14754}
14755
14756#endif
14757
14758static __inline__ vector double __ATTRS_o_ai vec_splats(double __a) {
14759 return (vector double)(__a);
14760}
14761#endif
14762
14763static __inline__ vector float __ATTRS_o_ai vec_splats(float __a) {
14764 return (vector float)(__a);
14765}
14766
14767/* ----------------------------- predicates --------------------------------- */
14768
14769/* vec_all_eq */
14770
14771static __inline__ int __ATTRS_o_ai vec_all_eq(vector signed char __a,
14772 vector signed char __b) {
14773 return __builtin_altivec_vcmpequb_p(__CR6_LT, (vector char)__a,
14774 (vector char)__b);
14775}
14776
14777static __inline__ int __ATTRS_o_ai vec_all_eq(vector signed char __a,
14778 vector bool char __b) {
14779 return __builtin_altivec_vcmpequb_p(__CR6_LT, (vector char)__a,
14780 (vector char)__b);
14781}
14782
14783static __inline__ int __ATTRS_o_ai vec_all_eq(vector unsigned char __a,
14784 vector unsigned char __b) {
14785 return __builtin_altivec_vcmpequb_p(__CR6_LT, (vector char)__a,
14786 (vector char)__b);
14787}
14788
14789static __inline__ int __ATTRS_o_ai vec_all_eq(vector unsigned char __a,
14790 vector bool char __b) {
14791 return __builtin_altivec_vcmpequb_p(__CR6_LT, (vector char)__a,
14792 (vector char)__b);
14793}
14794
14795static __inline__ int __ATTRS_o_ai vec_all_eq(vector bool char __a,
14796 vector signed char __b) {
14797 return __builtin_altivec_vcmpequb_p(__CR6_LT, (vector char)__a,
14798 (vector char)__b);
14799}
14800
14801static __inline__ int __ATTRS_o_ai vec_all_eq(vector bool char __a,
14802 vector unsigned char __b) {
14803 return __builtin_altivec_vcmpequb_p(__CR6_LT, (vector char)__a,
14804 (vector char)__b);
14805}
14806
14807static __inline__ int __ATTRS_o_ai vec_all_eq(vector bool char __a,
14808 vector bool char __b) {
14809 return __builtin_altivec_vcmpequb_p(__CR6_LT, (vector char)__a,
14810 (vector char)__b);
14811}
14812
14813static __inline__ int __ATTRS_o_ai vec_all_eq(vector short __a,
14814 vector short __b) {
14815 return __builtin_altivec_vcmpequh_p(__CR6_LT, __a, __b);
14816}
14817
14818static __inline__ int __ATTRS_o_ai vec_all_eq(vector short __a,
14819 vector bool short __b) {
14820 return __builtin_altivec_vcmpequh_p(__CR6_LT, __a, (vector short)__b);
14821}
14822
14823static __inline__ int __ATTRS_o_ai vec_all_eq(vector unsigned short __a,
14824 vector unsigned short __b) {
14825 return __builtin_altivec_vcmpequh_p(__CR6_LT, (vector short)__a,
14826 (vector short)__b);
14827}
14828
14829static __inline__ int __ATTRS_o_ai vec_all_eq(vector unsigned short __a,
14830 vector bool short __b) {
14831 return __builtin_altivec_vcmpequh_p(__CR6_LT, (vector short)__a,
14832 (vector short)__b);
14833}
14834
14835static __inline__ int __ATTRS_o_ai vec_all_eq(vector bool short __a,
14836 vector short __b) {
14837 return __builtin_altivec_vcmpequh_p(__CR6_LT, (vector short)__a,
14838 (vector short)__b);
14839}
14840
14841static __inline__ int __ATTRS_o_ai vec_all_eq(vector bool short __a,
14842 vector unsigned short __b) {
14843 return __builtin_altivec_vcmpequh_p(__CR6_LT, (vector short)__a,
14844 (vector short)__b);
14845}
14846
14847static __inline__ int __ATTRS_o_ai vec_all_eq(vector bool short __a,
14848 vector bool short __b) {
14849 return __builtin_altivec_vcmpequh_p(__CR6_LT, (vector short)__a,
14850 (vector short)__b);
14851}
14852
14853static __inline__ int __ATTRS_o_ai vec_all_eq(vector pixel __a,
14854 vector pixel __b) {
14855 return __builtin_altivec_vcmpequh_p(__CR6_LT, (vector short)__a,
14856 (vector short)__b);
14857}
14858
14859static __inline__ int __ATTRS_o_ai vec_all_eq(vector int __a, vector int __b) {
14860 return __builtin_altivec_vcmpequw_p(__CR6_LT, __a, __b);
14861}
14862
14863static __inline__ int __ATTRS_o_ai vec_all_eq(vector int __a,
14864 vector bool int __b) {
14865 return __builtin_altivec_vcmpequw_p(__CR6_LT, __a, (vector int)__b);
14866}
14867
14868static __inline__ int __ATTRS_o_ai vec_all_eq(vector unsigned int __a,
14869 vector unsigned int __b) {
14870 return __builtin_altivec_vcmpequw_p(__CR6_LT, (vector int)__a,
14871 (vector int)__b);
14872}
14873
14874static __inline__ int __ATTRS_o_ai vec_all_eq(vector unsigned int __a,
14875 vector bool int __b) {
14876 return __builtin_altivec_vcmpequw_p(__CR6_LT, (vector int)__a,
14877 (vector int)__b);
14878}
14879
14880static __inline__ int __ATTRS_o_ai vec_all_eq(vector bool int __a,
14881 vector int __b) {
14882 return __builtin_altivec_vcmpequw_p(__CR6_LT, (vector int)__a,
14883 (vector int)__b);
14884}
14885
14886static __inline__ int __ATTRS_o_ai vec_all_eq(vector bool int __a,
14887 vector unsigned int __b) {
14888 return __builtin_altivec_vcmpequw_p(__CR6_LT, (vector int)__a,
14889 (vector int)__b);
14890}
14891
14892static __inline__ int __ATTRS_o_ai vec_all_eq(vector bool int __a,
14893 vector bool int __b) {
14894 return __builtin_altivec_vcmpequw_p(__CR6_LT, (vector int)__a,
14895 (vector int)__b);
14896}
14897
14898#ifdef __VSX__
14899static __inline__ int __ATTRS_o_ai vec_all_eq(vector signed long long __a,
14900 vector signed long long __b) {
14901#ifdef __POWER8_VECTOR__
14902 return __builtin_altivec_vcmpequd_p(__CR6_LT, __a, __b);
14903#else
14904 // No vcmpequd on Power7 so we xor the two vectors and compare against zero as
14905 // 32-bit elements.
14906 return vec_all_eq((vector signed int)vec_xor(__a, __b), (vector signed int)0);
14907#endif
14908}
14909
14910static __inline__ int __ATTRS_o_ai vec_all_eq(vector long long __a,
14911 vector bool long long __b) {
14912 return vec_all_eq((vector signed long long)__a, (vector signed long long)__b);
14913}
14914
14915static __inline__ int __ATTRS_o_ai vec_all_eq(vector unsigned long long __a,
14916 vector unsigned long long __b) {
14917 return vec_all_eq((vector signed long long)__a, (vector signed long long)__b);
14918}
14919
14920static __inline__ int __ATTRS_o_ai vec_all_eq(vector unsigned long long __a,
14921 vector bool long long __b) {
14922 return vec_all_eq((vector signed long long)__a, (vector signed long long)__b);
14923}
14924
14925static __inline__ int __ATTRS_o_ai vec_all_eq(vector bool long long __a,
14926 vector long long __b) {
14927 return vec_all_eq((vector signed long long)__a, (vector signed long long)__b);
14928}
14929
14930static __inline__ int __ATTRS_o_ai vec_all_eq(vector bool long long __a,
14931 vector unsigned long long __b) {
14932 return vec_all_eq((vector signed long long)__a, (vector signed long long)__b);
14933}
14934
14935static __inline__ int __ATTRS_o_ai vec_all_eq(vector bool long long __a,
14936 vector bool long long __b) {
14937 return vec_all_eq((vector signed long long)__a, (vector signed long long)__b);
14938}
14939#endif
14940
14941static __inline__ int __ATTRS_o_ai vec_all_eq(vector float __a,
14942 vector float __b) {
14943#ifdef __VSX__
14944 return __builtin_vsx_xvcmpeqsp_p(__CR6_LT, __a, __b);
14945#else
14946 return __builtin_altivec_vcmpeqfp_p(__CR6_LT, __a, __b);
14947#endif
14948}
14949
14950#ifdef __VSX__
14951static __inline__ int __ATTRS_o_ai vec_all_eq(vector double __a,
14952 vector double __b) {
14953 return __builtin_vsx_xvcmpeqdp_p(__CR6_LT, __a, __b);
14954}
14955#endif
14956
14957#if defined(__POWER10_VECTOR__) && defined(__SIZEOF_INT128__)
14958static __inline__ int __ATTRS_o_ai vec_all_eq(vector signed __int128 __a,
14959 vector signed __int128 __b) {
14960 return __builtin_altivec_vcmpequq_p(__CR6_LT, (vector unsigned __int128)__a,
14961 (vector signed __int128)__b);
14962}
14963
14964static __inline__ int __ATTRS_o_ai vec_all_eq(vector unsigned __int128 __a,
14965 vector unsigned __int128 __b) {
14966 return __builtin_altivec_vcmpequq_p(__CR6_LT, __a,
14967 (vector signed __int128)__b);
14968}
14969
14970static __inline__ int __ATTRS_o_ai vec_all_eq(vector bool __int128 __a,
14971 vector bool __int128 __b) {
14972 return __builtin_altivec_vcmpequq_p(__CR6_LT, (vector unsigned __int128)__a,
14973 (vector signed __int128)__b);
14974}
14975#endif
14976
14977/* vec_all_ge */
14978
14979static __inline__ int __ATTRS_o_ai vec_all_ge(vector signed char __a,
14980 vector signed char __b) {
14981 return __builtin_altivec_vcmpgtsb_p(__CR6_EQ, __b, __a);
14982}
14983
14984static __inline__ int __ATTRS_o_ai vec_all_ge(vector signed char __a,
14985 vector bool char __b) {
14986 return __builtin_altivec_vcmpgtsb_p(__CR6_EQ, (vector signed char)__b, __a);
14987}
14988
14989static __inline__ int __ATTRS_o_ai vec_all_ge(vector unsigned char __a,
14990 vector unsigned char __b) {
14991 return __builtin_altivec_vcmpgtub_p(__CR6_EQ, __b, __a);
14992}
14993
14994static __inline__ int __ATTRS_o_ai vec_all_ge(vector unsigned char __a,
14995 vector bool char __b) {
14996 return __builtin_altivec_vcmpgtub_p(__CR6_EQ, (vector unsigned char)__b, __a);
14997}
14998
14999static __inline__ int __ATTRS_o_ai vec_all_ge(vector bool char __a,
15000 vector signed char __b) {
15001 return __builtin_altivec_vcmpgtsb_p(__CR6_EQ, __b, (vector signed char)__a);
15002}
15003
15004static __inline__ int __ATTRS_o_ai vec_all_ge(vector bool char __a,
15005 vector unsigned char __b) {
15006 return __builtin_altivec_vcmpgtub_p(__CR6_EQ, __b, (vector unsigned char)__a);
15007}
15008
15009static __inline__ int __ATTRS_o_ai vec_all_ge(vector bool char __a,
15010 vector bool char __b) {
15011 return __builtin_altivec_vcmpgtub_p(__CR6_EQ, (vector unsigned char)__b,
15012 (vector unsigned char)__a);
15013}
15014
15015static __inline__ int __ATTRS_o_ai vec_all_ge(vector short __a,
15016 vector short __b) {
15017 return __builtin_altivec_vcmpgtsh_p(__CR6_EQ, __b, __a);
15018}
15019
15020static __inline__ int __ATTRS_o_ai vec_all_ge(vector short __a,
15021 vector bool short __b) {
15022 return __builtin_altivec_vcmpgtsh_p(__CR6_EQ, (vector short)__b, __a);
15023}
15024
15025static __inline__ int __ATTRS_o_ai vec_all_ge(vector unsigned short __a,
15026 vector unsigned short __b) {
15027 return __builtin_altivec_vcmpgtuh_p(__CR6_EQ, __b, __a);
15028}
15029
15030static __inline__ int __ATTRS_o_ai vec_all_ge(vector unsigned short __a,
15031 vector bool short __b) {
15032 return __builtin_altivec_vcmpgtuh_p(__CR6_EQ, (vector unsigned short)__b,
15033 __a);
15034}
15035
15036static __inline__ int __ATTRS_o_ai vec_all_ge(vector bool short __a,
15037 vector short __b) {
15038 return __builtin_altivec_vcmpgtsh_p(__CR6_EQ, __b, (vector signed short)__a);
15039}
15040
15041static __inline__ int __ATTRS_o_ai vec_all_ge(vector bool short __a,
15042 vector unsigned short __b) {
15043 return __builtin_altivec_vcmpgtuh_p(__CR6_EQ, __b,
15044 (vector unsigned short)__a);
15045}
15046
15047static __inline__ int __ATTRS_o_ai vec_all_ge(vector bool short __a,
15048 vector bool short __b) {
15049 return __builtin_altivec_vcmpgtuh_p(__CR6_EQ, (vector unsigned short)__b,
15050 (vector unsigned short)__a);
15051}
15052
15053static __inline__ int __ATTRS_o_ai vec_all_ge(vector int __a, vector int __b) {
15054 return __builtin_altivec_vcmpgtsw_p(__CR6_EQ, __b, __a);
15055}
15056
15057static __inline__ int __ATTRS_o_ai vec_all_ge(vector int __a,
15058 vector bool int __b) {
15059 return __builtin_altivec_vcmpgtsw_p(__CR6_EQ, (vector int)__b, __a);
15060}
15061
15062static __inline__ int __ATTRS_o_ai vec_all_ge(vector unsigned int __a,
15063 vector unsigned int __b) {
15064 return __builtin_altivec_vcmpgtuw_p(__CR6_EQ, __b, __a);
15065}
15066
15067static __inline__ int __ATTRS_o_ai vec_all_ge(vector unsigned int __a,
15068 vector bool int __b) {
15069 return __builtin_altivec_vcmpgtuw_p(__CR6_EQ, (vector unsigned int)__b, __a);
15070}
15071
15072static __inline__ int __ATTRS_o_ai vec_all_ge(vector bool int __a,
15073 vector int __b) {
15074 return __builtin_altivec_vcmpgtsw_p(__CR6_EQ, __b, (vector signed int)__a);
15075}
15076
15077static __inline__ int __ATTRS_o_ai vec_all_ge(vector bool int __a,
15078 vector unsigned int __b) {
15079 return __builtin_altivec_vcmpgtuw_p(__CR6_EQ, __b, (vector unsigned int)__a);
15080}
15081
15082static __inline__ int __ATTRS_o_ai vec_all_ge(vector bool int __a,
15083 vector bool int __b) {
15084 return __builtin_altivec_vcmpgtuw_p(__CR6_EQ, (vector unsigned int)__b,
15085 (vector unsigned int)__a);
15086}
15087
15088#ifdef __VSX__
15089static __inline__ int __ATTRS_o_ai vec_all_ge(vector signed long long __a,
15090 vector signed long long __b) {
15091 return __builtin_altivec_vcmpgtsd_p(__CR6_EQ, __b, __a);
15092}
15093static __inline__ int __ATTRS_o_ai vec_all_ge(vector signed long long __a,
15094 vector bool long long __b) {
15095 return __builtin_altivec_vcmpgtsd_p(__CR6_EQ, (vector signed long long)__b,
15096 __a);
15097}
15098
15099static __inline__ int __ATTRS_o_ai vec_all_ge(vector unsigned long long __a,
15100 vector unsigned long long __b) {
15101 return __builtin_altivec_vcmpgtud_p(__CR6_EQ, __b, __a);
15102}
15103
15104static __inline__ int __ATTRS_o_ai vec_all_ge(vector unsigned long long __a,
15105 vector bool long long __b) {
15106 return __builtin_altivec_vcmpgtud_p(__CR6_EQ, (vector unsigned long long)__b,
15107 __a);
15108}
15109
15110static __inline__ int __ATTRS_o_ai vec_all_ge(vector bool long long __a,
15111 vector signed long long __b) {
15112 return __builtin_altivec_vcmpgtsd_p(__CR6_EQ, __b,
15113 (vector signed long long)__a);
15114}
15115
15116static __inline__ int __ATTRS_o_ai vec_all_ge(vector bool long long __a,
15117 vector unsigned long long __b) {
15118 return __builtin_altivec_vcmpgtud_p(__CR6_EQ, __b,
15119 (vector unsigned long long)__a);
15120}
15121
15122static __inline__ int __ATTRS_o_ai vec_all_ge(vector bool long long __a,
15123 vector bool long long __b) {
15124 return __builtin_altivec_vcmpgtud_p(__CR6_EQ, (vector unsigned long long)__b,
15125 (vector unsigned long long)__a);
15126}
15127#endif
15128
15129static __inline__ int __ATTRS_o_ai vec_all_ge(vector float __a,
15130 vector float __b) {
15131#ifdef __VSX__
15132 return __builtin_vsx_xvcmpgesp_p(__CR6_LT, __a, __b);
15133#else
15134 return __builtin_altivec_vcmpgefp_p(__CR6_LT, __a, __b);
15135#endif
15136}
15137
15138#ifdef __VSX__
15139static __inline__ int __ATTRS_o_ai vec_all_ge(vector double __a,
15140 vector double __b) {
15141 return __builtin_vsx_xvcmpgedp_p(__CR6_LT, __a, __b);
15142}
15143#endif
15144
15145#if defined(__POWER10_VECTOR__) && defined(__SIZEOF_INT128__)
15146static __inline__ int __ATTRS_o_ai vec_all_ge(vector signed __int128 __a,
15147 vector signed __int128 __b) {
15148 return __builtin_altivec_vcmpgtsq_p(__CR6_EQ, __b, __a);
15149}
15150
15151static __inline__ int __ATTRS_o_ai vec_all_ge(vector unsigned __int128 __a,
15152 vector unsigned __int128 __b) {
15153 return __builtin_altivec_vcmpgtuq_p(__CR6_EQ, __b, __a);
15154}
15155#endif
15156
15157/* vec_all_gt */
15158
15159static __inline__ int __ATTRS_o_ai vec_all_gt(vector signed char __a,
15160 vector signed char __b) {
15161 return __builtin_altivec_vcmpgtsb_p(__CR6_LT, __a, __b);
15162}
15163
15164static __inline__ int __ATTRS_o_ai vec_all_gt(vector signed char __a,
15165 vector bool char __b) {
15166 return __builtin_altivec_vcmpgtsb_p(__CR6_LT, __a, (vector signed char)__b);
15167}
15168
15169static __inline__ int __ATTRS_o_ai vec_all_gt(vector unsigned char __a,
15170 vector unsigned char __b) {
15171 return __builtin_altivec_vcmpgtub_p(__CR6_LT, __a, __b);
15172}
15173
15174static __inline__ int __ATTRS_o_ai vec_all_gt(vector unsigned char __a,
15175 vector bool char __b) {
15176 return __builtin_altivec_vcmpgtub_p(__CR6_LT, __a, (vector unsigned char)__b);
15177}
15178
15179static __inline__ int __ATTRS_o_ai vec_all_gt(vector bool char __a,
15180 vector signed char __b) {
15181 return __builtin_altivec_vcmpgtsb_p(__CR6_LT, (vector signed char)__a, __b);
15182}
15183
15184static __inline__ int __ATTRS_o_ai vec_all_gt(vector bool char __a,
15185 vector unsigned char __b) {
15186 return __builtin_altivec_vcmpgtub_p(__CR6_LT, (vector unsigned char)__a, __b);
15187}
15188
15189static __inline__ int __ATTRS_o_ai vec_all_gt(vector bool char __a,
15190 vector bool char __b) {
15191 return __builtin_altivec_vcmpgtub_p(__CR6_LT, (vector unsigned char)__a,
15192 (vector unsigned char)__b);
15193}
15194
15195static __inline__ int __ATTRS_o_ai vec_all_gt(vector short __a,
15196 vector short __b) {
15197 return __builtin_altivec_vcmpgtsh_p(__CR6_LT, __a, __b);
15198}
15199
15200static __inline__ int __ATTRS_o_ai vec_all_gt(vector short __a,
15201 vector bool short __b) {
15202 return __builtin_altivec_vcmpgtsh_p(__CR6_LT, __a, (vector short)__b);
15203}
15204
15205static __inline__ int __ATTRS_o_ai vec_all_gt(vector unsigned short __a,
15206 vector unsigned short __b) {
15207 return __builtin_altivec_vcmpgtuh_p(__CR6_LT, __a, __b);
15208}
15209
15210static __inline__ int __ATTRS_o_ai vec_all_gt(vector unsigned short __a,
15211 vector bool short __b) {
15212 return __builtin_altivec_vcmpgtuh_p(__CR6_LT, __a,
15213 (vector unsigned short)__b);
15214}
15215
15216static __inline__ int __ATTRS_o_ai vec_all_gt(vector bool short __a,
15217 vector short __b) {
15218 return __builtin_altivec_vcmpgtsh_p(__CR6_LT, (vector signed short)__a, __b);
15219}
15220
15221static __inline__ int __ATTRS_o_ai vec_all_gt(vector bool short __a,
15222 vector unsigned short __b) {
15223 return __builtin_altivec_vcmpgtuh_p(__CR6_LT, (vector unsigned short)__a,
15224 __b);
15225}
15226
15227static __inline__ int __ATTRS_o_ai vec_all_gt(vector bool short __a,
15228 vector bool short __b) {
15229 return __builtin_altivec_vcmpgtuh_p(__CR6_LT, (vector unsigned short)__a,
15230 (vector unsigned short)__b);
15231}
15232
15233static __inline__ int __ATTRS_o_ai vec_all_gt(vector int __a, vector int __b) {
15234 return __builtin_altivec_vcmpgtsw_p(__CR6_LT, __a, __b);
15235}
15236
15237static __inline__ int __ATTRS_o_ai vec_all_gt(vector int __a,
15238 vector bool int __b) {
15239 return __builtin_altivec_vcmpgtsw_p(__CR6_LT, __a, (vector int)__b);
15240}
15241
15242static __inline__ int __ATTRS_o_ai vec_all_gt(vector unsigned int __a,
15243 vector unsigned int __b) {
15244 return __builtin_altivec_vcmpgtuw_p(__CR6_LT, __a, __b);
15245}
15246
15247static __inline__ int __ATTRS_o_ai vec_all_gt(vector unsigned int __a,
15248 vector bool int __b) {
15249 return __builtin_altivec_vcmpgtuw_p(__CR6_LT, __a, (vector unsigned int)__b);
15250}
15251
15252static __inline__ int __ATTRS_o_ai vec_all_gt(vector bool int __a,
15253 vector int __b) {
15254 return __builtin_altivec_vcmpgtsw_p(__CR6_LT, (vector signed int)__a, __b);
15255}
15256
15257static __inline__ int __ATTRS_o_ai vec_all_gt(vector bool int __a,
15258 vector unsigned int __b) {
15259 return __builtin_altivec_vcmpgtuw_p(__CR6_LT, (vector unsigned int)__a, __b);
15260}
15261
15262static __inline__ int __ATTRS_o_ai vec_all_gt(vector bool int __a,
15263 vector bool int __b) {
15264 return __builtin_altivec_vcmpgtuw_p(__CR6_LT, (vector unsigned int)__a,
15265 (vector unsigned int)__b);
15266}
15267
15268#ifdef __VSX__
15269static __inline__ int __ATTRS_o_ai vec_all_gt(vector signed long long __a,
15270 vector signed long long __b) {
15271 return __builtin_altivec_vcmpgtsd_p(__CR6_LT, __a, __b);
15272}
15273static __inline__ int __ATTRS_o_ai vec_all_gt(vector signed long long __a,
15274 vector bool long long __b) {
15275 return __builtin_altivec_vcmpgtsd_p(__CR6_LT, __a,
15276 (vector signed long long)__b);
15277}
15278
15279static __inline__ int __ATTRS_o_ai vec_all_gt(vector unsigned long long __a,
15280 vector unsigned long long __b) {
15281 return __builtin_altivec_vcmpgtud_p(__CR6_LT, __a, __b);
15282}
15283
15284static __inline__ int __ATTRS_o_ai vec_all_gt(vector unsigned long long __a,
15285 vector bool long long __b) {
15286 return __builtin_altivec_vcmpgtud_p(__CR6_LT, __a,
15287 (vector unsigned long long)__b);
15288}
15289
15290static __inline__ int __ATTRS_o_ai vec_all_gt(vector bool long long __a,
15291 vector signed long long __b) {
15292 return __builtin_altivec_vcmpgtsd_p(__CR6_LT, (vector signed long long)__a,
15293 __b);
15294}
15295
15296static __inline__ int __ATTRS_o_ai vec_all_gt(vector bool long long __a,
15297 vector unsigned long long __b) {
15298 return __builtin_altivec_vcmpgtud_p(__CR6_LT, (vector unsigned long long)__a,
15299 __b);
15300}
15301
15302static __inline__ int __ATTRS_o_ai vec_all_gt(vector bool long long __a,
15303 vector bool long long __b) {
15304 return __builtin_altivec_vcmpgtud_p(__CR6_LT, (vector unsigned long long)__a,
15305 (vector unsigned long long)__b);
15306}
15307#endif
15308
15309static __inline__ int __ATTRS_o_ai vec_all_gt(vector float __a,
15310 vector float __b) {
15311#ifdef __VSX__
15312 return __builtin_vsx_xvcmpgtsp_p(__CR6_LT, __a, __b);
15313#else
15314 return __builtin_altivec_vcmpgtfp_p(__CR6_LT, __a, __b);
15315#endif
15316}
15317
15318#ifdef __VSX__
15319static __inline__ int __ATTRS_o_ai vec_all_gt(vector double __a,
15320 vector double __b) {
15321 return __builtin_vsx_xvcmpgtdp_p(__CR6_LT, __a, __b);
15322}
15323#endif
15324
15325#if defined(__POWER10_VECTOR__) && defined(__SIZEOF_INT128__)
15326static __inline__ int __ATTRS_o_ai vec_all_gt(vector signed __int128 __a,
15327 vector signed __int128 __b) {
15328 return __builtin_altivec_vcmpgtsq_p(__CR6_LT, __a, __b);
15329}
15330
15331static __inline__ int __ATTRS_o_ai vec_all_gt(vector unsigned __int128 __a,
15332 vector unsigned __int128 __b) {
15333 return __builtin_altivec_vcmpgtuq_p(__CR6_LT, __a, __b);
15334}
15335#endif
15336
15337/* vec_all_in */
15338
15339static __inline__ int __attribute__((__always_inline__))
15340vec_all_in(vector float __a, vector float __b) {
15341 return __builtin_altivec_vcmpbfp_p(__CR6_EQ, __a, __b);
15342}
15343
15344/* vec_all_le */
15345
15346static __inline__ int __ATTRS_o_ai vec_all_le(vector signed char __a,
15347 vector signed char __b) {
15348 return __builtin_altivec_vcmpgtsb_p(__CR6_EQ, __a, __b);
15349}
15350
15351static __inline__ int __ATTRS_o_ai vec_all_le(vector signed char __a,
15352 vector bool char __b) {
15353 return __builtin_altivec_vcmpgtsb_p(__CR6_EQ, __a, (vector signed char)__b);
15354}
15355
15356static __inline__ int __ATTRS_o_ai vec_all_le(vector unsigned char __a,
15357 vector unsigned char __b) {
15358 return __builtin_altivec_vcmpgtub_p(__CR6_EQ, __a, __b);
15359}
15360
15361static __inline__ int __ATTRS_o_ai vec_all_le(vector unsigned char __a,
15362 vector bool char __b) {
15363 return __builtin_altivec_vcmpgtub_p(__CR6_EQ, __a, (vector unsigned char)__b);
15364}
15365
15366static __inline__ int __ATTRS_o_ai vec_all_le(vector bool char __a,
15367 vector signed char __b) {
15368 return __builtin_altivec_vcmpgtsb_p(__CR6_EQ, (vector signed char)__a, __b);
15369}
15370
15371static __inline__ int __ATTRS_o_ai vec_all_le(vector bool char __a,
15372 vector unsigned char __b) {
15373 return __builtin_altivec_vcmpgtub_p(__CR6_EQ, (vector unsigned char)__a, __b);
15374}
15375
15376static __inline__ int __ATTRS_o_ai vec_all_le(vector bool char __a,
15377 vector bool char __b) {
15378 return __builtin_altivec_vcmpgtub_p(__CR6_EQ, (vector unsigned char)__a,
15379 (vector unsigned char)__b);
15380}
15381
15382static __inline__ int __ATTRS_o_ai vec_all_le(vector short __a,
15383 vector short __b) {
15384 return __builtin_altivec_vcmpgtsh_p(__CR6_EQ, __a, __b);
15385}
15386
15387static __inline__ int __ATTRS_o_ai vec_all_le(vector short __a,
15388 vector bool short __b) {
15389 return __builtin_altivec_vcmpgtsh_p(__CR6_EQ, __a, (vector short)__b);
15390}
15391
15392static __inline__ int __ATTRS_o_ai vec_all_le(vector unsigned short __a,
15393 vector unsigned short __b) {
15394 return __builtin_altivec_vcmpgtuh_p(__CR6_EQ, __a, __b);
15395}
15396
15397static __inline__ int __ATTRS_o_ai vec_all_le(vector unsigned short __a,
15398 vector bool short __b) {
15399 return __builtin_altivec_vcmpgtuh_p(__CR6_EQ, __a,
15400 (vector unsigned short)__b);
15401}
15402
15403static __inline__ int __ATTRS_o_ai vec_all_le(vector bool short __a,
15404 vector short __b) {
15405 return __builtin_altivec_vcmpgtsh_p(__CR6_EQ, (vector signed short)__a, __b);
15406}
15407
15408static __inline__ int __ATTRS_o_ai vec_all_le(vector bool short __a,
15409 vector unsigned short __b) {
15410 return __builtin_altivec_vcmpgtuh_p(__CR6_EQ, (vector unsigned short)__a,
15411 __b);
15412}
15413
15414static __inline__ int __ATTRS_o_ai vec_all_le(vector bool short __a,
15415 vector bool short __b) {
15416 return __builtin_altivec_vcmpgtuh_p(__CR6_EQ, (vector unsigned short)__a,
15417 (vector unsigned short)__b);
15418}
15419
15420static __inline__ int __ATTRS_o_ai vec_all_le(vector int __a, vector int __b) {
15421 return __builtin_altivec_vcmpgtsw_p(__CR6_EQ, __a, __b);
15422}
15423
15424static __inline__ int __ATTRS_o_ai vec_all_le(vector int __a,
15425 vector bool int __b) {
15426 return __builtin_altivec_vcmpgtsw_p(__CR6_EQ, __a, (vector int)__b);
15427}
15428
15429static __inline__ int __ATTRS_o_ai vec_all_le(vector unsigned int __a,
15430 vector unsigned int __b) {
15431 return __builtin_altivec_vcmpgtuw_p(__CR6_EQ, __a, __b);
15432}
15433
15434static __inline__ int __ATTRS_o_ai vec_all_le(vector unsigned int __a,
15435 vector bool int __b) {
15436 return __builtin_altivec_vcmpgtuw_p(__CR6_EQ, __a, (vector unsigned int)__b);
15437}
15438
15439static __inline__ int __ATTRS_o_ai vec_all_le(vector bool int __a,
15440 vector int __b) {
15441 return __builtin_altivec_vcmpgtsw_p(__CR6_EQ, (vector signed int)__a, __b);
15442}
15443
15444static __inline__ int __ATTRS_o_ai vec_all_le(vector bool int __a,
15445 vector unsigned int __b) {
15446 return __builtin_altivec_vcmpgtuw_p(__CR6_EQ, (vector unsigned int)__a, __b);
15447}
15448
15449static __inline__ int __ATTRS_o_ai vec_all_le(vector bool int __a,
15450 vector bool int __b) {
15451 return __builtin_altivec_vcmpgtuw_p(__CR6_EQ, (vector unsigned int)__a,
15452 (vector unsigned int)__b);
15453}
15454
15455#ifdef __VSX__
15456static __inline__ int __ATTRS_o_ai vec_all_le(vector signed long long __a,
15457 vector signed long long __b) {
15458 return __builtin_altivec_vcmpgtsd_p(__CR6_EQ, __a, __b);
15459}
15460
15461static __inline__ int __ATTRS_o_ai vec_all_le(vector unsigned long long __a,
15462 vector unsigned long long __b) {
15463 return __builtin_altivec_vcmpgtud_p(__CR6_EQ, __a, __b);
15464}
15465
15466static __inline__ int __ATTRS_o_ai vec_all_le(vector signed long long __a,
15467 vector bool long long __b) {
15468 return __builtin_altivec_vcmpgtsd_p(__CR6_EQ, __a,
15469 (vector signed long long)__b);
15470}
15471
15472static __inline__ int __ATTRS_o_ai vec_all_le(vector unsigned long long __a,
15473 vector bool long long __b) {
15474 return __builtin_altivec_vcmpgtud_p(__CR6_EQ, __a,
15475 (vector unsigned long long)__b);
15476}
15477
15478static __inline__ int __ATTRS_o_ai vec_all_le(vector bool long long __a,
15479 vector signed long long __b) {
15480 return __builtin_altivec_vcmpgtsd_p(__CR6_EQ, (vector signed long long)__a,
15481 __b);
15482}
15483
15484static __inline__ int __ATTRS_o_ai vec_all_le(vector bool long long __a,
15485 vector unsigned long long __b) {
15486 return __builtin_altivec_vcmpgtud_p(__CR6_EQ, (vector unsigned long long)__a,
15487 __b);
15488}
15489
15490static __inline__ int __ATTRS_o_ai vec_all_le(vector bool long long __a,
15491 vector bool long long __b) {
15492 return __builtin_altivec_vcmpgtud_p(__CR6_EQ, (vector unsigned long long)__a,
15493 (vector unsigned long long)__b);
15494}
15495#endif
15496
15497static __inline__ int __ATTRS_o_ai vec_all_le(vector float __a,
15498 vector float __b) {
15499#ifdef __VSX__
15500 return __builtin_vsx_xvcmpgesp_p(__CR6_LT, __b, __a);
15501#else
15502 return __builtin_altivec_vcmpgefp_p(__CR6_LT, __b, __a);
15503#endif
15504}
15505
15506#ifdef __VSX__
15507static __inline__ int __ATTRS_o_ai vec_all_le(vector double __a,
15508 vector double __b) {
15509 return __builtin_vsx_xvcmpgedp_p(__CR6_LT, __b, __a);
15510}
15511#endif
15512
15513#if defined(__POWER10_VECTOR__) && defined(__SIZEOF_INT128__)
15514static __inline__ int __ATTRS_o_ai vec_all_le(vector signed __int128 __a,
15515 vector signed __int128 __b) {
15516 return __builtin_altivec_vcmpgtsq_p(__CR6_EQ, __a, __b);
15517}
15518
15519static __inline__ int __ATTRS_o_ai vec_all_le(vector unsigned __int128 __a,
15520 vector unsigned __int128 __b) {
15521 return __builtin_altivec_vcmpgtuq_p(__CR6_EQ, __a, __b);
15522}
15523#endif
15524
15525/* vec_all_lt */
15526
15527static __inline__ int __ATTRS_o_ai vec_all_lt(vector signed char __a,
15528 vector signed char __b) {
15529 return __builtin_altivec_vcmpgtsb_p(__CR6_LT, __b, __a);
15530}
15531
15532static __inline__ int __ATTRS_o_ai vec_all_lt(vector signed char __a,
15533 vector bool char __b) {
15534 return __builtin_altivec_vcmpgtsb_p(__CR6_LT, (vector signed char)__b, __a);
15535}
15536
15537static __inline__ int __ATTRS_o_ai vec_all_lt(vector unsigned char __a,
15538 vector unsigned char __b) {
15539 return __builtin_altivec_vcmpgtub_p(__CR6_LT, __b, __a);
15540}
15541
15542static __inline__ int __ATTRS_o_ai vec_all_lt(vector unsigned char __a,
15543 vector bool char __b) {
15544 return __builtin_altivec_vcmpgtub_p(__CR6_LT, (vector unsigned char)__b, __a);
15545}
15546
15547static __inline__ int __ATTRS_o_ai vec_all_lt(vector bool char __a,
15548 vector signed char __b) {
15549 return __builtin_altivec_vcmpgtsb_p(__CR6_LT, __b, (vector signed char)__a);
15550}
15551
15552static __inline__ int __ATTRS_o_ai vec_all_lt(vector bool char __a,
15553 vector unsigned char __b) {
15554 return __builtin_altivec_vcmpgtub_p(__CR6_LT, __b, (vector unsigned char)__a);
15555}
15556
15557static __inline__ int __ATTRS_o_ai vec_all_lt(vector bool char __a,
15558 vector bool char __b) {
15559 return __builtin_altivec_vcmpgtub_p(__CR6_LT, (vector unsigned char)__b,
15560 (vector unsigned char)__a);
15561}
15562
15563static __inline__ int __ATTRS_o_ai vec_all_lt(vector short __a,
15564 vector short __b) {
15565 return __builtin_altivec_vcmpgtsh_p(__CR6_LT, __b, __a);
15566}
15567
15568static __inline__ int __ATTRS_o_ai vec_all_lt(vector short __a,
15569 vector bool short __b) {
15570 return __builtin_altivec_vcmpgtsh_p(__CR6_LT, (vector short)__b, __a);
15571}
15572
15573static __inline__ int __ATTRS_o_ai vec_all_lt(vector unsigned short __a,
15574 vector unsigned short __b) {
15575 return __builtin_altivec_vcmpgtuh_p(__CR6_LT, __b, __a);
15576}
15577
15578static __inline__ int __ATTRS_o_ai vec_all_lt(vector unsigned short __a,
15579 vector bool short __b) {
15580 return __builtin_altivec_vcmpgtuh_p(__CR6_LT, (vector unsigned short)__b,
15581 __a);
15582}
15583
15584static __inline__ int __ATTRS_o_ai vec_all_lt(vector bool short __a,
15585 vector short __b) {
15586 return __builtin_altivec_vcmpgtsh_p(__CR6_LT, __b, (vector signed short)__a);
15587}
15588
15589static __inline__ int __ATTRS_o_ai vec_all_lt(vector bool short __a,
15590 vector unsigned short __b) {
15591 return __builtin_altivec_vcmpgtuh_p(__CR6_LT, __b,
15592 (vector unsigned short)__a);
15593}
15594
15595static __inline__ int __ATTRS_o_ai vec_all_lt(vector bool short __a,
15596 vector bool short __b) {
15597 return __builtin_altivec_vcmpgtuh_p(__CR6_LT, (vector unsigned short)__b,
15598 (vector unsigned short)__a);
15599}
15600
15601static __inline__ int __ATTRS_o_ai vec_all_lt(vector int __a, vector int __b) {
15602 return __builtin_altivec_vcmpgtsw_p(__CR6_LT, __b, __a);
15603}
15604
15605static __inline__ int __ATTRS_o_ai vec_all_lt(vector int __a,
15606 vector bool int __b) {
15607 return __builtin_altivec_vcmpgtsw_p(__CR6_LT, (vector int)__b, __a);
15608}
15609
15610static __inline__ int __ATTRS_o_ai vec_all_lt(vector unsigned int __a,
15611 vector unsigned int __b) {
15612 return __builtin_altivec_vcmpgtuw_p(__CR6_LT, __b, __a);
15613}
15614
15615static __inline__ int __ATTRS_o_ai vec_all_lt(vector unsigned int __a,
15616 vector bool int __b) {
15617 return __builtin_altivec_vcmpgtuw_p(__CR6_LT, (vector unsigned int)__b, __a);
15618}
15619
15620static __inline__ int __ATTRS_o_ai vec_all_lt(vector bool int __a,
15621 vector int __b) {
15622 return __builtin_altivec_vcmpgtsw_p(__CR6_LT, __b, (vector signed int)__a);
15623}
15624
15625static __inline__ int __ATTRS_o_ai vec_all_lt(vector bool int __a,
15626 vector unsigned int __b) {
15627 return __builtin_altivec_vcmpgtuw_p(__CR6_LT, __b, (vector unsigned int)__a);
15628}
15629
15630static __inline__ int __ATTRS_o_ai vec_all_lt(vector bool int __a,
15631 vector bool int __b) {
15632 return __builtin_altivec_vcmpgtuw_p(__CR6_LT, (vector unsigned int)__b,
15633 (vector unsigned int)__a);
15634}
15635
15636#ifdef __VSX__
15637static __inline__ int __ATTRS_o_ai vec_all_lt(vector signed long long __a,
15638 vector signed long long __b) {
15639 return __builtin_altivec_vcmpgtsd_p(__CR6_LT, __b, __a);
15640}
15641
15642static __inline__ int __ATTRS_o_ai vec_all_lt(vector unsigned long long __a,
15643 vector unsigned long long __b) {
15644 return __builtin_altivec_vcmpgtud_p(__CR6_LT, __b, __a);
15645}
15646
15647static __inline__ int __ATTRS_o_ai vec_all_lt(vector signed long long __a,
15648 vector bool long long __b) {
15649 return __builtin_altivec_vcmpgtsd_p(__CR6_LT, (vector signed long long)__b,
15650 __a);
15651}
15652
15653static __inline__ int __ATTRS_o_ai vec_all_lt(vector unsigned long long __a,
15654 vector bool long long __b) {
15655 return __builtin_altivec_vcmpgtud_p(__CR6_LT, (vector unsigned long long)__b,
15656 __a);
15657}
15658
15659static __inline__ int __ATTRS_o_ai vec_all_lt(vector bool long long __a,
15660 vector signed long long __b) {
15661 return __builtin_altivec_vcmpgtsd_p(__CR6_LT, __b,
15662 (vector signed long long)__a);
15663}
15664
15665static __inline__ int __ATTRS_o_ai vec_all_lt(vector bool long long __a,
15666 vector unsigned long long __b) {
15667 return __builtin_altivec_vcmpgtud_p(__CR6_LT, __b,
15668 (vector unsigned long long)__a);
15669}
15670
15671static __inline__ int __ATTRS_o_ai vec_all_lt(vector bool long long __a,
15672 vector bool long long __b) {
15673 return __builtin_altivec_vcmpgtud_p(__CR6_LT, (vector unsigned long long)__b,
15674 (vector unsigned long long)__a);
15675}
15676#endif
15677
15678static __inline__ int __ATTRS_o_ai vec_all_lt(vector float __a,
15679 vector float __b) {
15680#ifdef __VSX__
15681 return __builtin_vsx_xvcmpgtsp_p(__CR6_LT, __b, __a);
15682#else
15683 return __builtin_altivec_vcmpgtfp_p(__CR6_LT, __b, __a);
15684#endif
15685}
15686
15687#ifdef __VSX__
15688static __inline__ int __ATTRS_o_ai vec_all_lt(vector double __a,
15689 vector double __b) {
15690 return __builtin_vsx_xvcmpgtdp_p(__CR6_LT, __b, __a);
15691}
15692#endif
15693
15694#if defined(__POWER10_VECTOR__) && defined(__SIZEOF_INT128__)
15695static __inline__ int __ATTRS_o_ai vec_all_lt(vector signed __int128 __a,
15696 vector signed __int128 __b) {
15697 return __builtin_altivec_vcmpgtsq_p(__CR6_LT, __b, __a);
15698}
15699
15700static __inline__ int __ATTRS_o_ai vec_all_lt(vector unsigned __int128 __a,
15701 vector unsigned __int128 __b) {
15702 return __builtin_altivec_vcmpgtuq_p(__CR6_LT, __b, __a);
15703}
15704#endif
15705
15706/* vec_all_nan */
15707
15708static __inline__ int __ATTRS_o_ai vec_all_nan(vector float __a) {
15709#ifdef __VSX__
15710 return __builtin_vsx_xvcmpeqsp_p(__CR6_EQ, __a, __a);
15711#else
15712 return __builtin_altivec_vcmpeqfp_p(__CR6_EQ, __a, __a);
15713#endif
15714}
15715
15716#ifdef __VSX__
15717static __inline__ int __ATTRS_o_ai vec_all_nan(vector double __a) {
15718 return __builtin_vsx_xvcmpeqdp_p(__CR6_EQ, __a, __a);
15719}
15720#endif
15721
15722/* vec_all_ne */
15723
15724static __inline__ int __ATTRS_o_ai vec_all_ne(vector signed char __a,
15725 vector signed char __b) {
15726 return __builtin_altivec_vcmpequb_p(__CR6_EQ, (vector char)__a,
15727 (vector char)__b);
15728}
15729
15730static __inline__ int __ATTRS_o_ai vec_all_ne(vector signed char __a,
15731 vector bool char __b) {
15732 return __builtin_altivec_vcmpequb_p(__CR6_EQ, (vector char)__a,
15733 (vector char)__b);
15734}
15735
15736static __inline__ int __ATTRS_o_ai vec_all_ne(vector unsigned char __a,
15737 vector unsigned char __b) {
15738 return __builtin_altivec_vcmpequb_p(__CR6_EQ, (vector char)__a,
15739 (vector char)__b);
15740}
15741
15742static __inline__ int __ATTRS_o_ai vec_all_ne(vector unsigned char __a,
15743 vector bool char __b) {
15744 return __builtin_altivec_vcmpequb_p(__CR6_EQ, (vector char)__a,
15745 (vector char)__b);
15746}
15747
15748static __inline__ int __ATTRS_o_ai vec_all_ne(vector bool char __a,
15749 vector signed char __b) {
15750 return __builtin_altivec_vcmpequb_p(__CR6_EQ, (vector char)__a,
15751 (vector char)__b);
15752}
15753
15754static __inline__ int __ATTRS_o_ai vec_all_ne(vector bool char __a,
15755 vector unsigned char __b) {
15756 return __builtin_altivec_vcmpequb_p(__CR6_EQ, (vector char)__a,
15757 (vector char)__b);
15758}
15759
15760static __inline__ int __ATTRS_o_ai vec_all_ne(vector bool char __a,
15761 vector bool char __b) {
15762 return __builtin_altivec_vcmpequb_p(__CR6_EQ, (vector char)__a,
15763 (vector char)__b);
15764}
15765
15766static __inline__ int __ATTRS_o_ai vec_all_ne(vector short __a,
15767 vector short __b) {
15768 return __builtin_altivec_vcmpequh_p(__CR6_EQ, __a, __b);
15769}
15770
15771static __inline__ int __ATTRS_o_ai vec_all_ne(vector short __a,
15772 vector bool short __b) {
15773 return __builtin_altivec_vcmpequh_p(__CR6_EQ, __a, (vector short)__b);
15774}
15775
15776static __inline__ int __ATTRS_o_ai vec_all_ne(vector unsigned short __a,
15777 vector unsigned short __b) {
15778 return __builtin_altivec_vcmpequh_p(__CR6_EQ, (vector short)__a,
15779 (vector short)__b);
15780}
15781
15782static __inline__ int __ATTRS_o_ai vec_all_ne(vector unsigned short __a,
15783 vector bool short __b) {
15784 return __builtin_altivec_vcmpequh_p(__CR6_EQ, (vector short)__a,
15785 (vector short)__b);
15786}
15787
15788static __inline__ int __ATTRS_o_ai vec_all_ne(vector bool short __a,
15789 vector short __b) {
15790 return __builtin_altivec_vcmpequh_p(__CR6_EQ, (vector short)__a,
15791 (vector short)__b);
15792}
15793
15794static __inline__ int __ATTRS_o_ai vec_all_ne(vector bool short __a,
15795 vector unsigned short __b) {
15796 return __builtin_altivec_vcmpequh_p(__CR6_EQ, (vector short)__a,
15797 (vector short)__b);
15798}
15799
15800static __inline__ int __ATTRS_o_ai vec_all_ne(vector bool short __a,
15801 vector bool short __b) {
15802 return __builtin_altivec_vcmpequh_p(__CR6_EQ, (vector short)__a,
15803 (vector short)__b);
15804}
15805
15806static __inline__ int __ATTRS_o_ai vec_all_ne(vector pixel __a,
15807 vector pixel __b) {
15808 return __builtin_altivec_vcmpequh_p(__CR6_EQ, (vector short)__a,
15809 (vector short)__b);
15810}
15811
15812static __inline__ int __ATTRS_o_ai vec_all_ne(vector int __a, vector int __b) {
15813 return __builtin_altivec_vcmpequw_p(__CR6_EQ, __a, __b);
15814}
15815
15816static __inline__ int __ATTRS_o_ai vec_all_ne(vector int __a,
15817 vector bool int __b) {
15818 return __builtin_altivec_vcmpequw_p(__CR6_EQ, __a, (vector int)__b);
15819}
15820
15821static __inline__ int __ATTRS_o_ai vec_all_ne(vector unsigned int __a,
15822 vector unsigned int __b) {
15823 return __builtin_altivec_vcmpequw_p(__CR6_EQ, (vector int)__a,
15824 (vector int)__b);
15825}
15826
15827static __inline__ int __ATTRS_o_ai vec_all_ne(vector unsigned int __a,
15828 vector bool int __b) {
15829 return __builtin_altivec_vcmpequw_p(__CR6_EQ, (vector int)__a,
15830 (vector int)__b);
15831}
15832
15833static __inline__ int __ATTRS_o_ai vec_all_ne(vector bool int __a,
15834 vector int __b) {
15835 return __builtin_altivec_vcmpequw_p(__CR6_EQ, (vector int)__a,
15836 (vector int)__b);
15837}
15838
15839static __inline__ int __ATTRS_o_ai vec_all_ne(vector bool int __a,
15840 vector unsigned int __b) {
15841 return __builtin_altivec_vcmpequw_p(__CR6_EQ, (vector int)__a,
15842 (vector int)__b);
15843}
15844
15845static __inline__ int __ATTRS_o_ai vec_all_ne(vector bool int __a,
15846 vector bool int __b) {
15847 return __builtin_altivec_vcmpequw_p(__CR6_EQ, (vector int)__a,
15848 (vector int)__b);
15849}
15850
15851#ifdef __VSX__
15852static __inline__ int __ATTRS_o_ai vec_all_ne(vector signed long long __a,
15853 vector signed long long __b) {
15854 return __builtin_altivec_vcmpequd_p(__CR6_EQ, __a, __b);
15855}
15856
15857static __inline__ int __ATTRS_o_ai vec_all_ne(vector unsigned long long __a,
15858 vector unsigned long long __b) {
15859 return __builtin_altivec_vcmpequd_p(__CR6_EQ, (vector long long)__a,
15860 (vector long long)__b);
15861}
15862
15863static __inline__ int __ATTRS_o_ai vec_all_ne(vector signed long long __a,
15864 vector bool long long __b) {
15865 return __builtin_altivec_vcmpequd_p(__CR6_EQ, __a,
15866 (vector signed long long)__b);
15867}
15868
15869static __inline__ int __ATTRS_o_ai vec_all_ne(vector unsigned long long __a,
15870 vector bool long long __b) {
15871 return __builtin_altivec_vcmpequd_p(__CR6_EQ, (vector signed long long)__a,
15872 (vector signed long long)__b);
15873}
15874
15875static __inline__ int __ATTRS_o_ai vec_all_ne(vector bool long long __a,
15876 vector signed long long __b) {
15877 return __builtin_altivec_vcmpequd_p(__CR6_EQ, (vector signed long long)__a,
15878 (vector signed long long)__b);
15879}
15880
15881static __inline__ int __ATTRS_o_ai vec_all_ne(vector bool long long __a,
15882 vector unsigned long long __b) {
15883 return __builtin_altivec_vcmpequd_p(__CR6_EQ, (vector signed long long)__a,
15884 (vector signed long long)__b);
15885}
15886
15887static __inline__ int __ATTRS_o_ai vec_all_ne(vector bool long long __a,
15888 vector bool long long __b) {
15889 return __builtin_altivec_vcmpequd_p(__CR6_EQ, (vector signed long long)__a,
15890 (vector signed long long)__b);
15891}
15892#endif
15893
15894static __inline__ int __ATTRS_o_ai vec_all_ne(vector float __a,
15895 vector float __b) {
15896#ifdef __VSX__
15897 return __builtin_vsx_xvcmpeqsp_p(__CR6_EQ, __a, __b);
15898#else
15899 return __builtin_altivec_vcmpeqfp_p(__CR6_EQ, __a, __b);
15900#endif
15901}
15902
15903#ifdef __VSX__
15904static __inline__ int __ATTRS_o_ai vec_all_ne(vector double __a,
15905 vector double __b) {
15906 return __builtin_vsx_xvcmpeqdp_p(__CR6_EQ, __a, __b);
15907}
15908#endif
15909
15910#if defined(__POWER10_VECTOR__) && defined(__SIZEOF_INT128__)
15911static __inline__ int __ATTRS_o_ai vec_all_ne(vector signed __int128 __a,
15912 vector signed __int128 __b) {
15913 return __builtin_altivec_vcmpequq_p(__CR6_EQ, (vector unsigned __int128)__a,
15914 __b);
15915}
15916
15917static __inline__ int __ATTRS_o_ai vec_all_ne(vector unsigned __int128 __a,
15918 vector unsigned __int128 __b) {
15919 return __builtin_altivec_vcmpequq_p(__CR6_EQ, __a,
15920 (vector signed __int128)__b);
15921}
15922
15923static __inline__ int __ATTRS_o_ai vec_all_ne(vector bool __int128 __a,
15924 vector bool __int128 __b) {
15925 return __builtin_altivec_vcmpequq_p(__CR6_EQ, (vector unsigned __int128)__a,
15926 (vector signed __int128)__b);
15927}
15928#endif
15929
15930/* vec_all_nge */
15931
15932static __inline__ int __ATTRS_o_ai vec_all_nge(vector float __a,
15933 vector float __b) {
15934#ifdef __VSX__
15935 return __builtin_vsx_xvcmpgesp_p(__CR6_EQ, __a, __b);
15936#else
15937 return __builtin_altivec_vcmpgefp_p(__CR6_EQ, __a, __b);
15938#endif
15939}
15940
15941#ifdef __VSX__
15942static __inline__ int __ATTRS_o_ai vec_all_nge(vector double __a,
15943 vector double __b) {
15944 return __builtin_vsx_xvcmpgedp_p(__CR6_EQ, __a, __b);
15945}
15946#endif
15947
15948/* vec_all_ngt */
15949
15950static __inline__ int __ATTRS_o_ai vec_all_ngt(vector float __a,
15951 vector float __b) {
15952#ifdef __VSX__
15953 return __builtin_vsx_xvcmpgtsp_p(__CR6_EQ, __a, __b);
15954#else
15955 return __builtin_altivec_vcmpgtfp_p(__CR6_EQ, __a, __b);
15956#endif
15957}
15958
15959#ifdef __VSX__
15960static __inline__ int __ATTRS_o_ai vec_all_ngt(vector double __a,
15961 vector double __b) {
15962 return __builtin_vsx_xvcmpgtdp_p(__CR6_EQ, __a, __b);
15963}
15964#endif
15965
15966/* vec_all_nle */
15967
15968static __inline__ int __ATTRS_o_ai
15969vec_all_nle(vector float __a, vector float __b) {
15970#ifdef __VSX__
15971 return __builtin_vsx_xvcmpgesp_p(__CR6_EQ, __b, __a);
15972#else
15973 return __builtin_altivec_vcmpgefp_p(__CR6_EQ, __b, __a);
15974#endif
15975}
15976
15977#ifdef __VSX__
15978static __inline__ int __ATTRS_o_ai vec_all_nle(vector double __a,
15979 vector double __b) {
15980 return __builtin_vsx_xvcmpgedp_p(__CR6_EQ, __b, __a);
15981}
15982#endif
15983
15984/* vec_all_nlt */
15985
15986static __inline__ int __ATTRS_o_ai
15987vec_all_nlt(vector float __a, vector float __b) {
15988#ifdef __VSX__
15989 return __builtin_vsx_xvcmpgtsp_p(__CR6_EQ, __b, __a);
15990#else
15991 return __builtin_altivec_vcmpgtfp_p(__CR6_EQ, __b, __a);
15992#endif
15993}
15994
15995#ifdef __VSX__
15996static __inline__ int __ATTRS_o_ai vec_all_nlt(vector double __a,
15997 vector double __b) {
15998 return __builtin_vsx_xvcmpgtdp_p(__CR6_EQ, __b, __a);
15999}
16000#endif
16001
16002/* vec_all_numeric */
16003
16004static __inline__ int __ATTRS_o_ai
16005vec_all_numeric(vector float __a) {
16006#ifdef __VSX__
16007 return __builtin_vsx_xvcmpeqsp_p(__CR6_LT, __a, __a);
16008#else
16009 return __builtin_altivec_vcmpeqfp_p(__CR6_LT, __a, __a);
16010#endif
16011}
16012
16013#ifdef __VSX__
16014static __inline__ int __ATTRS_o_ai vec_all_numeric(vector double __a) {
16015 return __builtin_vsx_xvcmpeqdp_p(__CR6_LT, __a, __a);
16016}
16017#endif
16018
16019/* vec_any_eq */
16020
16021static __inline__ int __ATTRS_o_ai vec_any_eq(vector signed char __a,
16022 vector signed char __b) {
16023 return __builtin_altivec_vcmpequb_p(__CR6_EQ_REV, (vector char)__a,
16024 (vector char)__b);
16025}
16026
16027static __inline__ int __ATTRS_o_ai vec_any_eq(vector signed char __a,
16028 vector bool char __b) {
16029 return __builtin_altivec_vcmpequb_p(__CR6_EQ_REV, (vector char)__a,
16030 (vector char)__b);
16031}
16032
16033static __inline__ int __ATTRS_o_ai vec_any_eq(vector unsigned char __a,
16034 vector unsigned char __b) {
16035 return __builtin_altivec_vcmpequb_p(__CR6_EQ_REV, (vector char)__a,
16036 (vector char)__b);
16037}
16038
16039static __inline__ int __ATTRS_o_ai vec_any_eq(vector unsigned char __a,
16040 vector bool char __b) {
16041 return __builtin_altivec_vcmpequb_p(__CR6_EQ_REV, (vector char)__a,
16042 (vector char)__b);
16043}
16044
16045static __inline__ int __ATTRS_o_ai vec_any_eq(vector bool char __a,
16046 vector signed char __b) {
16047 return __builtin_altivec_vcmpequb_p(__CR6_EQ_REV, (vector char)__a,
16048 (vector char)__b);
16049}
16050
16051static __inline__ int __ATTRS_o_ai vec_any_eq(vector bool char __a,
16052 vector unsigned char __b) {
16053 return __builtin_altivec_vcmpequb_p(__CR6_EQ_REV, (vector char)__a,
16054 (vector char)__b);
16055}
16056
16057static __inline__ int __ATTRS_o_ai vec_any_eq(vector bool char __a,
16058 vector bool char __b) {
16059 return __builtin_altivec_vcmpequb_p(__CR6_EQ_REV, (vector char)__a,
16060 (vector char)__b);
16061}
16062
16063static __inline__ int __ATTRS_o_ai vec_any_eq(vector short __a,
16064 vector short __b) {
16065 return __builtin_altivec_vcmpequh_p(__CR6_EQ_REV, __a, __b);
16066}
16067
16068static __inline__ int __ATTRS_o_ai vec_any_eq(vector short __a,
16069 vector bool short __b) {
16070 return __builtin_altivec_vcmpequh_p(__CR6_EQ_REV, __a, (vector short)__b);
16071}
16072
16073static __inline__ int __ATTRS_o_ai vec_any_eq(vector unsigned short __a,
16074 vector unsigned short __b) {
16075 return __builtin_altivec_vcmpequh_p(__CR6_EQ_REV, (vector short)__a,
16076 (vector short)__b);
16077}
16078
16079static __inline__ int __ATTRS_o_ai vec_any_eq(vector unsigned short __a,
16080 vector bool short __b) {
16081 return __builtin_altivec_vcmpequh_p(__CR6_EQ_REV, (vector short)__a,
16082 (vector short)__b);
16083}
16084
16085static __inline__ int __ATTRS_o_ai vec_any_eq(vector bool short __a,
16086 vector short __b) {
16087 return __builtin_altivec_vcmpequh_p(__CR6_EQ_REV, (vector short)__a,
16088 (vector short)__b);
16089}
16090
16091static __inline__ int __ATTRS_o_ai vec_any_eq(vector bool short __a,
16092 vector unsigned short __b) {
16093 return __builtin_altivec_vcmpequh_p(__CR6_EQ_REV, (vector short)__a,
16094 (vector short)__b);
16095}
16096
16097static __inline__ int __ATTRS_o_ai vec_any_eq(vector bool short __a,
16098 vector bool short __b) {
16099 return __builtin_altivec_vcmpequh_p(__CR6_EQ_REV, (vector short)__a,
16100 (vector short)__b);
16101}
16102
16103static __inline__ int __ATTRS_o_ai vec_any_eq(vector pixel __a,
16104 vector pixel __b) {
16105 return __builtin_altivec_vcmpequh_p(__CR6_EQ_REV, (vector short)__a,
16106 (vector short)__b);
16107}
16108
16109static __inline__ int __ATTRS_o_ai vec_any_eq(vector int __a, vector int __b) {
16110 return __builtin_altivec_vcmpequw_p(__CR6_EQ_REV, __a, __b);
16111}
16112
16113static __inline__ int __ATTRS_o_ai vec_any_eq(vector int __a,
16114 vector bool int __b) {
16115 return __builtin_altivec_vcmpequw_p(__CR6_EQ_REV, __a, (vector int)__b);
16116}
16117
16118static __inline__ int __ATTRS_o_ai vec_any_eq(vector unsigned int __a,
16119 vector unsigned int __b) {
16120 return __builtin_altivec_vcmpequw_p(__CR6_EQ_REV, (vector int)__a,
16121 (vector int)__b);
16122}
16123
16124static __inline__ int __ATTRS_o_ai vec_any_eq(vector unsigned int __a,
16125 vector bool int __b) {
16126 return __builtin_altivec_vcmpequw_p(__CR6_EQ_REV, (vector int)__a,
16127 (vector int)__b);
16128}
16129
16130static __inline__ int __ATTRS_o_ai vec_any_eq(vector bool int __a,
16131 vector int __b) {
16132 return __builtin_altivec_vcmpequw_p(__CR6_EQ_REV, (vector int)__a,
16133 (vector int)__b);
16134}
16135
16136static __inline__ int __ATTRS_o_ai vec_any_eq(vector bool int __a,
16137 vector unsigned int __b) {
16138 return __builtin_altivec_vcmpequw_p(__CR6_EQ_REV, (vector int)__a,
16139 (vector int)__b);
16140}
16141
16142static __inline__ int __ATTRS_o_ai vec_any_eq(vector bool int __a,
16143 vector bool int __b) {
16144 return __builtin_altivec_vcmpequw_p(__CR6_EQ_REV, (vector int)__a,
16145 (vector int)__b);
16146}
16147
16148#ifdef __VSX__
16149static __inline__ int __ATTRS_o_ai vec_any_eq(vector signed long long __a,
16150 vector signed long long __b) {
16151 return __builtin_altivec_vcmpequd_p(__CR6_EQ_REV, __a, __b);
16152}
16153
16154static __inline__ int __ATTRS_o_ai vec_any_eq(vector unsigned long long __a,
16155 vector unsigned long long __b) {
16156 return __builtin_altivec_vcmpequd_p(__CR6_EQ_REV, (vector long long)__a,
16157 (vector long long)__b);
16158}
16159
16160static __inline__ int __ATTRS_o_ai vec_any_eq(vector signed long long __a,
16161 vector bool long long __b) {
16162 return __builtin_altivec_vcmpequd_p(__CR6_EQ_REV, __a,
16163 (vector signed long long)__b);
16164}
16165
16166static __inline__ int __ATTRS_o_ai vec_any_eq(vector unsigned long long __a,
16167 vector bool long long __b) {
16168 return __builtin_altivec_vcmpequd_p(
16169 __CR6_EQ_REV, (vector signed long long)__a, (vector signed long long)__b);
16170}
16171
16172static __inline__ int __ATTRS_o_ai vec_any_eq(vector bool long long __a,
16173 vector signed long long __b) {
16174 return __builtin_altivec_vcmpequd_p(
16175 __CR6_EQ_REV, (vector signed long long)__a, (vector signed long long)__b);
16176}
16177
16178static __inline__ int __ATTRS_o_ai vec_any_eq(vector bool long long __a,
16179 vector unsigned long long __b) {
16180 return __builtin_altivec_vcmpequd_p(
16181 __CR6_EQ_REV, (vector signed long long)__a, (vector signed long long)__b);
16182}
16183
16184static __inline__ int __ATTRS_o_ai vec_any_eq(vector bool long long __a,
16185 vector bool long long __b) {
16186 return __builtin_altivec_vcmpequd_p(
16187 __CR6_EQ_REV, (vector signed long long)__a, (vector signed long long)__b);
16188}
16189#endif
16190
16191static __inline__ int __ATTRS_o_ai vec_any_eq(vector float __a,
16192 vector float __b) {
16193#ifdef __VSX__
16194 return __builtin_vsx_xvcmpeqsp_p(__CR6_EQ_REV, __a, __b);
16195#else
16196 return __builtin_altivec_vcmpeqfp_p(__CR6_EQ_REV, __a, __b);
16197#endif
16198}
16199
16200#ifdef __VSX__
16201static __inline__ int __ATTRS_o_ai vec_any_eq(vector double __a,
16202 vector double __b) {
16203 return __builtin_vsx_xvcmpeqdp_p(__CR6_EQ_REV, __a, __b);
16204}
16205#endif
16206
16207#if defined(__POWER10_VECTOR__) && defined(__SIZEOF_INT128__)
16208static __inline__ int __ATTRS_o_ai vec_any_eq(vector signed __int128 __a,
16209 vector signed __int128 __b) {
16210 return __builtin_altivec_vcmpequq_p(__CR6_EQ_REV,
16211 (vector unsigned __int128)__a, __b);
16212}
16213
16214static __inline__ int __ATTRS_o_ai vec_any_eq(vector unsigned __int128 __a,
16215 vector unsigned __int128 __b) {
16216 return __builtin_altivec_vcmpequq_p(__CR6_EQ_REV, __a,
16217 (vector signed __int128)__b);
16218}
16219
16220static __inline__ int __ATTRS_o_ai vec_any_eq(vector bool __int128 __a,
16221 vector bool __int128 __b) {
16222 return __builtin_altivec_vcmpequq_p(
16223 __CR6_EQ_REV, (vector unsigned __int128)__a, (vector signed __int128)__b);
16224}
16225#endif
16226
16227/* vec_any_ge */
16228
16229static __inline__ int __ATTRS_o_ai vec_any_ge(vector signed char __a,
16230 vector signed char __b) {
16231 return __builtin_altivec_vcmpgtsb_p(__CR6_LT_REV, __b, __a);
16232}
16233
16234static __inline__ int __ATTRS_o_ai vec_any_ge(vector signed char __a,
16235 vector bool char __b) {
16236 return __builtin_altivec_vcmpgtsb_p(__CR6_LT_REV, (vector signed char)__b,
16237 __a);
16238}
16239
16240static __inline__ int __ATTRS_o_ai vec_any_ge(vector unsigned char __a,
16241 vector unsigned char __b) {
16242 return __builtin_altivec_vcmpgtub_p(__CR6_LT_REV, __b, __a);
16243}
16244
16245static __inline__ int __ATTRS_o_ai vec_any_ge(vector unsigned char __a,
16246 vector bool char __b) {
16247 return __builtin_altivec_vcmpgtub_p(__CR6_LT_REV, (vector unsigned char)__b,
16248 __a);
16249}
16250
16251static __inline__ int __ATTRS_o_ai vec_any_ge(vector bool char __a,
16252 vector signed char __b) {
16253 return __builtin_altivec_vcmpgtsb_p(__CR6_LT_REV, __b,
16254 (vector signed char)__a);
16255}
16256
16257static __inline__ int __ATTRS_o_ai vec_any_ge(vector bool char __a,
16258 vector unsigned char __b) {
16259 return __builtin_altivec_vcmpgtub_p(__CR6_LT_REV, __b,
16260 (vector unsigned char)__a);
16261}
16262
16263static __inline__ int __ATTRS_o_ai vec_any_ge(vector bool char __a,
16264 vector bool char __b) {
16265 return __builtin_altivec_vcmpgtub_p(__CR6_LT_REV, (vector unsigned char)__b,
16266 (vector unsigned char)__a);
16267}
16268
16269static __inline__ int __ATTRS_o_ai vec_any_ge(vector short __a,
16270 vector short __b) {
16271 return __builtin_altivec_vcmpgtsh_p(__CR6_LT_REV, __b, __a);
16272}
16273
16274static __inline__ int __ATTRS_o_ai vec_any_ge(vector short __a,
16275 vector bool short __b) {
16276 return __builtin_altivec_vcmpgtsh_p(__CR6_LT_REV, (vector short)__b, __a);
16277}
16278
16279static __inline__ int __ATTRS_o_ai vec_any_ge(vector unsigned short __a,
16280 vector unsigned short __b) {
16281 return __builtin_altivec_vcmpgtuh_p(__CR6_LT_REV, __b, __a);
16282}
16283
16284static __inline__ int __ATTRS_o_ai vec_any_ge(vector unsigned short __a,
16285 vector bool short __b) {
16286 return __builtin_altivec_vcmpgtuh_p(__CR6_LT_REV, (vector unsigned short)__b,
16287 __a);
16288}
16289
16290static __inline__ int __ATTRS_o_ai vec_any_ge(vector bool short __a,
16291 vector short __b) {
16292 return __builtin_altivec_vcmpgtsh_p(__CR6_LT_REV, __b,
16293 (vector signed short)__a);
16294}
16295
16296static __inline__ int __ATTRS_o_ai vec_any_ge(vector bool short __a,
16297 vector unsigned short __b) {
16298 return __builtin_altivec_vcmpgtuh_p(__CR6_LT_REV, __b,
16299 (vector unsigned short)__a);
16300}
16301
16302static __inline__ int __ATTRS_o_ai vec_any_ge(vector bool short __a,
16303 vector bool short __b) {
16304 return __builtin_altivec_vcmpgtuh_p(__CR6_LT_REV, (vector unsigned short)__b,
16305 (vector unsigned short)__a);
16306}
16307
16308static __inline__ int __ATTRS_o_ai vec_any_ge(vector int __a, vector int __b) {
16309 return __builtin_altivec_vcmpgtsw_p(__CR6_LT_REV, __b, __a);
16310}
16311
16312static __inline__ int __ATTRS_o_ai vec_any_ge(vector int __a,
16313 vector bool int __b) {
16314 return __builtin_altivec_vcmpgtsw_p(__CR6_LT_REV, (vector int)__b, __a);
16315}
16316
16317static __inline__ int __ATTRS_o_ai vec_any_ge(vector unsigned int __a,
16318 vector unsigned int __b) {
16319 return __builtin_altivec_vcmpgtuw_p(__CR6_LT_REV, __b, __a);
16320}
16321
16322static __inline__ int __ATTRS_o_ai vec_any_ge(vector unsigned int __a,
16323 vector bool int __b) {
16324 return __builtin_altivec_vcmpgtuw_p(__CR6_LT_REV, (vector unsigned int)__b,
16325 __a);
16326}
16327
16328static __inline__ int __ATTRS_o_ai vec_any_ge(vector bool int __a,
16329 vector int __b) {
16330 return __builtin_altivec_vcmpgtsw_p(__CR6_LT_REV, __b,
16331 (vector signed int)__a);
16332}
16333
16334static __inline__ int __ATTRS_o_ai vec_any_ge(vector bool int __a,
16335 vector unsigned int __b) {
16336 return __builtin_altivec_vcmpgtuw_p(__CR6_LT_REV, __b,
16337 (vector unsigned int)__a);
16338}
16339
16340static __inline__ int __ATTRS_o_ai vec_any_ge(vector bool int __a,
16341 vector bool int __b) {
16342 return __builtin_altivec_vcmpgtuw_p(__CR6_LT_REV, (vector unsigned int)__b,
16343 (vector unsigned int)__a);
16344}
16345
16346#ifdef __VSX__
16347static __inline__ int __ATTRS_o_ai vec_any_ge(vector signed long long __a,
16348 vector signed long long __b) {
16349 return __builtin_altivec_vcmpgtsd_p(__CR6_LT_REV, __b, __a);
16350}
16351
16352static __inline__ int __ATTRS_o_ai vec_any_ge(vector unsigned long long __a,
16353 vector unsigned long long __b) {
16354 return __builtin_altivec_vcmpgtud_p(__CR6_LT_REV, __b, __a);
16355}
16356
16357static __inline__ int __ATTRS_o_ai vec_any_ge(vector signed long long __a,
16358 vector bool long long __b) {
16359 return __builtin_altivec_vcmpgtsd_p(__CR6_LT_REV,
16360 (vector signed long long)__b, __a);
16361}
16362
16363static __inline__ int __ATTRS_o_ai vec_any_ge(vector unsigned long long __a,
16364 vector bool long long __b) {
16365 return __builtin_altivec_vcmpgtud_p(__CR6_LT_REV,
16366 (vector unsigned long long)__b, __a);
16367}
16368
16369static __inline__ int __ATTRS_o_ai vec_any_ge(vector bool long long __a,
16370 vector signed long long __b) {
16371 return __builtin_altivec_vcmpgtsd_p(__CR6_LT_REV, __b,
16372 (vector signed long long)__a);
16373}
16374
16375static __inline__ int __ATTRS_o_ai vec_any_ge(vector bool long long __a,
16376 vector unsigned long long __b) {
16377 return __builtin_altivec_vcmpgtud_p(__CR6_LT_REV, __b,
16378 (vector unsigned long long)__a);
16379}
16380
16381static __inline__ int __ATTRS_o_ai vec_any_ge(vector bool long long __a,
16382 vector bool long long __b) {
16383 return __builtin_altivec_vcmpgtud_p(__CR6_LT_REV,
16384 (vector unsigned long long)__b,
16385 (vector unsigned long long)__a);
16386}
16387#endif
16388
16389static __inline__ int __ATTRS_o_ai vec_any_ge(vector float __a,
16390 vector float __b) {
16391#ifdef __VSX__
16392 return __builtin_vsx_xvcmpgesp_p(__CR6_EQ_REV, __a, __b);
16393#else
16394 return __builtin_altivec_vcmpgefp_p(__CR6_EQ_REV, __a, __b);
16395#endif
16396}
16397
16398#ifdef __VSX__
16399static __inline__ int __ATTRS_o_ai vec_any_ge(vector double __a,
16400 vector double __b) {
16401 return __builtin_vsx_xvcmpgedp_p(__CR6_EQ_REV, __a, __b);
16402}
16403#endif
16404
16405#if defined(__POWER10_VECTOR__) && defined(__SIZEOF_INT128__)
16406static __inline__ int __ATTRS_o_ai vec_any_ge(vector signed __int128 __a,
16407 vector signed __int128 __b) {
16408 return __builtin_altivec_vcmpgtsq_p(__CR6_LT_REV, __b, __a);
16409}
16410
16411static __inline__ int __ATTRS_o_ai vec_any_ge(vector unsigned __int128 __a,
16412 vector unsigned __int128 __b) {
16413 return __builtin_altivec_vcmpgtuq_p(__CR6_LT_REV, __b, __a);
16414}
16415#endif
16416
16417/* vec_any_gt */
16418
16419static __inline__ int __ATTRS_o_ai vec_any_gt(vector signed char __a,
16420 vector signed char __b) {
16421 return __builtin_altivec_vcmpgtsb_p(__CR6_EQ_REV, __a, __b);
16422}
16423
16424static __inline__ int __ATTRS_o_ai vec_any_gt(vector signed char __a,
16425 vector bool char __b) {
16426 return __builtin_altivec_vcmpgtsb_p(__CR6_EQ_REV, __a,
16427 (vector signed char)__b);
16428}
16429
16430static __inline__ int __ATTRS_o_ai vec_any_gt(vector unsigned char __a,
16431 vector unsigned char __b) {
16432 return __builtin_altivec_vcmpgtub_p(__CR6_EQ_REV, __a, __b);
16433}
16434
16435static __inline__ int __ATTRS_o_ai vec_any_gt(vector unsigned char __a,
16436 vector bool char __b) {
16437 return __builtin_altivec_vcmpgtub_p(__CR6_EQ_REV, __a,
16438 (vector unsigned char)__b);
16439}
16440
16441static __inline__ int __ATTRS_o_ai vec_any_gt(vector bool char __a,
16442 vector signed char __b) {
16443 return __builtin_altivec_vcmpgtsb_p(__CR6_EQ_REV, (vector signed char)__a,
16444 __b);
16445}
16446
16447static __inline__ int __ATTRS_o_ai vec_any_gt(vector bool char __a,
16448 vector unsigned char __b) {
16449 return __builtin_altivec_vcmpgtub_p(__CR6_EQ_REV, (vector unsigned char)__a,
16450 __b);
16451}
16452
16453static __inline__ int __ATTRS_o_ai vec_any_gt(vector bool char __a,
16454 vector bool char __b) {
16455 return __builtin_altivec_vcmpgtub_p(__CR6_EQ_REV, (vector unsigned char)__a,
16456 (vector unsigned char)__b);
16457}
16458
16459static __inline__ int __ATTRS_o_ai vec_any_gt(vector short __a,
16460 vector short __b) {
16461 return __builtin_altivec_vcmpgtsh_p(__CR6_EQ_REV, __a, __b);
16462}
16463
16464static __inline__ int __ATTRS_o_ai vec_any_gt(vector short __a,
16465 vector bool short __b) {
16466 return __builtin_altivec_vcmpgtsh_p(__CR6_EQ_REV, __a, (vector short)__b);
16467}
16468
16469static __inline__ int __ATTRS_o_ai vec_any_gt(vector unsigned short __a,
16470 vector unsigned short __b) {
16471 return __builtin_altivec_vcmpgtuh_p(__CR6_EQ_REV, __a, __b);
16472}
16473
16474static __inline__ int __ATTRS_o_ai vec_any_gt(vector unsigned short __a,
16475 vector bool short __b) {
16476 return __builtin_altivec_vcmpgtuh_p(__CR6_EQ_REV, __a,
16477 (vector unsigned short)__b);
16478}
16479
16480static __inline__ int __ATTRS_o_ai vec_any_gt(vector bool short __a,
16481 vector short __b) {
16482 return __builtin_altivec_vcmpgtsh_p(__CR6_EQ_REV, (vector signed short)__a,
16483 __b);
16484}
16485
16486static __inline__ int __ATTRS_o_ai vec_any_gt(vector bool short __a,
16487 vector unsigned short __b) {
16488 return __builtin_altivec_vcmpgtuh_p(__CR6_EQ_REV, (vector unsigned short)__a,
16489 __b);
16490}
16491
16492static __inline__ int __ATTRS_o_ai vec_any_gt(vector bool short __a,
16493 vector bool short __b) {
16494 return __builtin_altivec_vcmpgtuh_p(__CR6_EQ_REV, (vector unsigned short)__a,
16495 (vector unsigned short)__b);
16496}
16497
16498static __inline__ int __ATTRS_o_ai vec_any_gt(vector int __a, vector int __b) {
16499 return __builtin_altivec_vcmpgtsw_p(__CR6_EQ_REV, __a, __b);
16500}
16501
16502static __inline__ int __ATTRS_o_ai vec_any_gt(vector int __a,
16503 vector bool int __b) {
16504 return __builtin_altivec_vcmpgtsw_p(__CR6_EQ_REV, __a, (vector int)__b);
16505}
16506
16507static __inline__ int __ATTRS_o_ai vec_any_gt(vector unsigned int __a,
16508 vector unsigned int __b) {
16509 return __builtin_altivec_vcmpgtuw_p(__CR6_EQ_REV, __a, __b);
16510}
16511
16512static __inline__ int __ATTRS_o_ai vec_any_gt(vector unsigned int __a,
16513 vector bool int __b) {
16514 return __builtin_altivec_vcmpgtuw_p(__CR6_EQ_REV, __a,
16515 (vector unsigned int)__b);
16516}
16517
16518static __inline__ int __ATTRS_o_ai vec_any_gt(vector bool int __a,
16519 vector int __b) {
16520 return __builtin_altivec_vcmpgtsw_p(__CR6_EQ_REV, (vector signed int)__a,
16521 __b);
16522}
16523
16524static __inline__ int __ATTRS_o_ai vec_any_gt(vector bool int __a,
16525 vector unsigned int __b) {
16526 return __builtin_altivec_vcmpgtuw_p(__CR6_EQ_REV, (vector unsigned int)__a,
16527 __b);
16528}
16529
16530static __inline__ int __ATTRS_o_ai vec_any_gt(vector bool int __a,
16531 vector bool int __b) {
16532 return __builtin_altivec_vcmpgtuw_p(__CR6_EQ_REV, (vector unsigned int)__a,
16533 (vector unsigned int)__b);
16534}
16535
16536#ifdef __VSX__
16537static __inline__ int __ATTRS_o_ai vec_any_gt(vector signed long long __a,
16538 vector signed long long __b) {
16539 return __builtin_altivec_vcmpgtsd_p(__CR6_EQ_REV, __a, __b);
16540}
16541
16542static __inline__ int __ATTRS_o_ai vec_any_gt(vector unsigned long long __a,
16543 vector unsigned long long __b) {
16544 return __builtin_altivec_vcmpgtud_p(__CR6_EQ_REV, __a, __b);
16545}
16546
16547static __inline__ int __ATTRS_o_ai vec_any_gt(vector signed long long __a,
16548 vector bool long long __b) {
16549 return __builtin_altivec_vcmpgtsd_p(__CR6_EQ_REV, __a,
16550 (vector signed long long)__b);
16551}
16552
16553static __inline__ int __ATTRS_o_ai vec_any_gt(vector unsigned long long __a,
16554 vector bool long long __b) {
16555 return __builtin_altivec_vcmpgtud_p(__CR6_EQ_REV, __a,
16556 (vector unsigned long long)__b);
16557}
16558
16559static __inline__ int __ATTRS_o_ai vec_any_gt(vector bool long long __a,
16560 vector signed long long __b) {
16561 return __builtin_altivec_vcmpgtsd_p(__CR6_EQ_REV,
16562 (vector signed long long)__a, __b);
16563}
16564
16565static __inline__ int __ATTRS_o_ai vec_any_gt(vector bool long long __a,
16566 vector unsigned long long __b) {
16567 return __builtin_altivec_vcmpgtud_p(__CR6_EQ_REV,
16568 (vector unsigned long long)__a, __b);
16569}
16570
16571static __inline__ int __ATTRS_o_ai vec_any_gt(vector bool long long __a,
16572 vector bool long long __b) {
16573 return __builtin_altivec_vcmpgtud_p(__CR6_EQ_REV,
16574 (vector unsigned long long)__a,
16575 (vector unsigned long long)__b);
16576}
16577#endif
16578
16579static __inline__ int __ATTRS_o_ai vec_any_gt(vector float __a,
16580 vector float __b) {
16581#ifdef __VSX__
16582 return __builtin_vsx_xvcmpgtsp_p(__CR6_EQ_REV, __a, __b);
16583#else
16584 return __builtin_altivec_vcmpgtfp_p(__CR6_EQ_REV, __a, __b);
16585#endif
16586}
16587
16588#ifdef __VSX__
16589static __inline__ int __ATTRS_o_ai vec_any_gt(vector double __a,
16590 vector double __b) {
16591 return __builtin_vsx_xvcmpgtdp_p(__CR6_EQ_REV, __a, __b);
16592}
16593#endif
16594
16595#if defined(__POWER10_VECTOR__) && defined(__SIZEOF_INT128__)
16596static __inline__ int __ATTRS_o_ai vec_any_gt(vector signed __int128 __a,
16597 vector signed __int128 __b) {
16598 return __builtin_altivec_vcmpgtsq_p(__CR6_EQ_REV, __a, __b);
16599}
16600
16601static __inline__ int __ATTRS_o_ai vec_any_gt(vector unsigned __int128 __a,
16602 vector unsigned __int128 __b) {
16603 return __builtin_altivec_vcmpgtuq_p(__CR6_EQ_REV, __a, __b);
16604}
16605#endif
16606
16607/* vec_any_le */
16608
16609static __inline__ int __ATTRS_o_ai vec_any_le(vector signed char __a,
16610 vector signed char __b) {
16611 return __builtin_altivec_vcmpgtsb_p(__CR6_LT_REV, __a, __b);
16612}
16613
16614static __inline__ int __ATTRS_o_ai vec_any_le(vector signed char __a,
16615 vector bool char __b) {
16616 return __builtin_altivec_vcmpgtsb_p(__CR6_LT_REV, __a,
16617 (vector signed char)__b);
16618}
16619
16620static __inline__ int __ATTRS_o_ai vec_any_le(vector unsigned char __a,
16621 vector unsigned char __b) {
16622 return __builtin_altivec_vcmpgtub_p(__CR6_LT_REV, __a, __b);
16623}
16624
16625static __inline__ int __ATTRS_o_ai vec_any_le(vector unsigned char __a,
16626 vector bool char __b) {
16627 return __builtin_altivec_vcmpgtub_p(__CR6_LT_REV, __a,
16628 (vector unsigned char)__b);
16629}
16630
16631static __inline__ int __ATTRS_o_ai vec_any_le(vector bool char __a,
16632 vector signed char __b) {
16633 return __builtin_altivec_vcmpgtsb_p(__CR6_LT_REV, (vector signed char)__a,
16634 __b);
16635}
16636
16637static __inline__ int __ATTRS_o_ai vec_any_le(vector bool char __a,
16638 vector unsigned char __b) {
16639 return __builtin_altivec_vcmpgtub_p(__CR6_LT_REV, (vector unsigned char)__a,
16640 __b);
16641}
16642
16643static __inline__ int __ATTRS_o_ai vec_any_le(vector bool char __a,
16644 vector bool char __b) {
16645 return __builtin_altivec_vcmpgtub_p(__CR6_LT_REV, (vector unsigned char)__a,
16646 (vector unsigned char)__b);
16647}
16648
16649static __inline__ int __ATTRS_o_ai vec_any_le(vector short __a,
16650 vector short __b) {
16651 return __builtin_altivec_vcmpgtsh_p(__CR6_LT_REV, __a, __b);
16652}
16653
16654static __inline__ int __ATTRS_o_ai vec_any_le(vector short __a,
16655 vector bool short __b) {
16656 return __builtin_altivec_vcmpgtsh_p(__CR6_LT_REV, __a, (vector short)__b);
16657}
16658
16659static __inline__ int __ATTRS_o_ai vec_any_le(vector unsigned short __a,
16660 vector unsigned short __b) {
16661 return __builtin_altivec_vcmpgtuh_p(__CR6_LT_REV, __a, __b);
16662}
16663
16664static __inline__ int __ATTRS_o_ai vec_any_le(vector unsigned short __a,
16665 vector bool short __b) {
16666 return __builtin_altivec_vcmpgtuh_p(__CR6_LT_REV, __a,
16667 (vector unsigned short)__b);
16668}
16669
16670static __inline__ int __ATTRS_o_ai vec_any_le(vector bool short __a,
16671 vector short __b) {
16672 return __builtin_altivec_vcmpgtsh_p(__CR6_LT_REV, (vector signed short)__a,
16673 __b);
16674}
16675
16676static __inline__ int __ATTRS_o_ai vec_any_le(vector bool short __a,
16677 vector unsigned short __b) {
16678 return __builtin_altivec_vcmpgtuh_p(__CR6_LT_REV, (vector unsigned short)__a,
16679 __b);
16680}
16681
16682static __inline__ int __ATTRS_o_ai vec_any_le(vector bool short __a,
16683 vector bool short __b) {
16684 return __builtin_altivec_vcmpgtuh_p(__CR6_LT_REV, (vector unsigned short)__a,
16685 (vector unsigned short)__b);
16686}
16687
16688static __inline__ int __ATTRS_o_ai vec_any_le(vector int __a, vector int __b) {
16689 return __builtin_altivec_vcmpgtsw_p(__CR6_LT_REV, __a, __b);
16690}
16691
16692static __inline__ int __ATTRS_o_ai vec_any_le(vector int __a,
16693 vector bool int __b) {
16694 return __builtin_altivec_vcmpgtsw_p(__CR6_LT_REV, __a, (vector int)__b);
16695}
16696
16697static __inline__ int __ATTRS_o_ai vec_any_le(vector unsigned int __a,
16698 vector unsigned int __b) {
16699 return __builtin_altivec_vcmpgtuw_p(__CR6_LT_REV, __a, __b);
16700}
16701
16702static __inline__ int __ATTRS_o_ai vec_any_le(vector unsigned int __a,
16703 vector bool int __b) {
16704 return __builtin_altivec_vcmpgtuw_p(__CR6_LT_REV, __a,
16705 (vector unsigned int)__b);
16706}
16707
16708static __inline__ int __ATTRS_o_ai vec_any_le(vector bool int __a,
16709 vector int __b) {
16710 return __builtin_altivec_vcmpgtsw_p(__CR6_LT_REV, (vector signed int)__a,
16711 __b);
16712}
16713
16714static __inline__ int __ATTRS_o_ai vec_any_le(vector bool int __a,
16715 vector unsigned int __b) {
16716 return __builtin_altivec_vcmpgtuw_p(__CR6_LT_REV, (vector unsigned int)__a,
16717 __b);
16718}
16719
16720static __inline__ int __ATTRS_o_ai vec_any_le(vector bool int __a,
16721 vector bool int __b) {
16722 return __builtin_altivec_vcmpgtuw_p(__CR6_LT_REV, (vector unsigned int)__a,
16723 (vector unsigned int)__b);
16724}
16725
16726#ifdef __VSX__
16727static __inline__ int __ATTRS_o_ai vec_any_le(vector signed long long __a,
16728 vector signed long long __b) {
16729 return __builtin_altivec_vcmpgtsd_p(__CR6_LT_REV, __a, __b);
16730}
16731
16732static __inline__ int __ATTRS_o_ai vec_any_le(vector unsigned long long __a,
16733 vector unsigned long long __b) {
16734 return __builtin_altivec_vcmpgtud_p(__CR6_LT_REV, __a, __b);
16735}
16736
16737static __inline__ int __ATTRS_o_ai vec_any_le(vector signed long long __a,
16738 vector bool long long __b) {
16739 return __builtin_altivec_vcmpgtsd_p(__CR6_LT_REV, __a,
16740 (vector signed long long)__b);
16741}
16742
16743static __inline__ int __ATTRS_o_ai vec_any_le(vector unsigned long long __a,
16744 vector bool long long __b) {
16745 return __builtin_altivec_vcmpgtud_p(__CR6_LT_REV, __a,
16746 (vector unsigned long long)__b);
16747}
16748
16749static __inline__ int __ATTRS_o_ai vec_any_le(vector bool long long __a,
16750 vector signed long long __b) {
16751 return __builtin_altivec_vcmpgtsd_p(__CR6_LT_REV,
16752 (vector signed long long)__a, __b);
16753}
16754
16755static __inline__ int __ATTRS_o_ai vec_any_le(vector bool long long __a,
16756 vector unsigned long long __b) {
16757 return __builtin_altivec_vcmpgtud_p(__CR6_LT_REV,
16758 (vector unsigned long long)__a, __b);
16759}
16760
16761static __inline__ int __ATTRS_o_ai vec_any_le(vector bool long long __a,
16762 vector bool long long __b) {
16763 return __builtin_altivec_vcmpgtud_p(__CR6_LT_REV,
16764 (vector unsigned long long)__a,
16765 (vector unsigned long long)__b);
16766}
16767#endif
16768
16769static __inline__ int __ATTRS_o_ai vec_any_le(vector float __a,
16770 vector float __b) {
16771#ifdef __VSX__
16772 return __builtin_vsx_xvcmpgesp_p(__CR6_EQ_REV, __b, __a);
16773#else
16774 return __builtin_altivec_vcmpgefp_p(__CR6_EQ_REV, __b, __a);
16775#endif
16776}
16777
16778#ifdef __VSX__
16779static __inline__ int __ATTRS_o_ai vec_any_le(vector double __a,
16780 vector double __b) {
16781 return __builtin_vsx_xvcmpgedp_p(__CR6_EQ_REV, __b, __a);
16782}
16783#endif
16784
16785#if defined(__POWER10_VECTOR__) && defined(__SIZEOF_INT128__)
16786static __inline__ int __ATTRS_o_ai vec_any_le(vector signed __int128 __a,
16787 vector signed __int128 __b) {
16788 return __builtin_altivec_vcmpgtsq_p(__CR6_LT_REV, __a, __b);
16789}
16790
16791static __inline__ int __ATTRS_o_ai vec_any_le(vector unsigned __int128 __a,
16792 vector unsigned __int128 __b) {
16793 return __builtin_altivec_vcmpgtuq_p(__CR6_LT_REV, __a, __b);
16794}
16795#endif
16796
16797/* vec_any_lt */
16798
16799static __inline__ int __ATTRS_o_ai vec_any_lt(vector signed char __a,
16800 vector signed char __b) {
16801 return __builtin_altivec_vcmpgtsb_p(__CR6_EQ_REV, __b, __a);
16802}
16803
16804static __inline__ int __ATTRS_o_ai vec_any_lt(vector signed char __a,
16805 vector bool char __b) {
16806 return __builtin_altivec_vcmpgtsb_p(__CR6_EQ_REV, (vector signed char)__b,
16807 __a);
16808}
16809
16810static __inline__ int __ATTRS_o_ai vec_any_lt(vector unsigned char __a,
16811 vector unsigned char __b) {
16812 return __builtin_altivec_vcmpgtub_p(__CR6_EQ_REV, __b, __a);
16813}
16814
16815static __inline__ int __ATTRS_o_ai vec_any_lt(vector unsigned char __a,
16816 vector bool char __b) {
16817 return __builtin_altivec_vcmpgtub_p(__CR6_EQ_REV, (vector unsigned char)__b,
16818 __a);
16819}
16820
16821static __inline__ int __ATTRS_o_ai vec_any_lt(vector bool char __a,
16822 vector signed char __b) {
16823 return __builtin_altivec_vcmpgtsb_p(__CR6_EQ_REV, __b,
16824 (vector signed char)__a);
16825}
16826
16827static __inline__ int __ATTRS_o_ai vec_any_lt(vector bool char __a,
16828 vector unsigned char __b) {
16829 return __builtin_altivec_vcmpgtub_p(__CR6_EQ_REV, __b,
16830 (vector unsigned char)__a);
16831}
16832
16833static __inline__ int __ATTRS_o_ai vec_any_lt(vector bool char __a,
16834 vector bool char __b) {
16835 return __builtin_altivec_vcmpgtub_p(__CR6_EQ_REV, (vector unsigned char)__b,
16836 (vector unsigned char)__a);
16837}
16838
16839static __inline__ int __ATTRS_o_ai vec_any_lt(vector short __a,
16840 vector short __b) {
16841 return __builtin_altivec_vcmpgtsh_p(__CR6_EQ_REV, __b, __a);
16842}
16843
16844static __inline__ int __ATTRS_o_ai vec_any_lt(vector short __a,
16845 vector bool short __b) {
16846 return __builtin_altivec_vcmpgtsh_p(__CR6_EQ_REV, (vector short)__b, __a);
16847}
16848
16849static __inline__ int __ATTRS_o_ai vec_any_lt(vector unsigned short __a,
16850 vector unsigned short __b) {
16851 return __builtin_altivec_vcmpgtuh_p(__CR6_EQ_REV, __b, __a);
16852}
16853
16854static __inline__ int __ATTRS_o_ai vec_any_lt(vector unsigned short __a,
16855 vector bool short __b) {
16856 return __builtin_altivec_vcmpgtuh_p(__CR6_EQ_REV, (vector unsigned short)__b,
16857 __a);
16858}
16859
16860static __inline__ int __ATTRS_o_ai vec_any_lt(vector bool short __a,
16861 vector short __b) {
16862 return __builtin_altivec_vcmpgtsh_p(__CR6_EQ_REV, __b,
16863 (vector signed short)__a);
16864}
16865
16866static __inline__ int __ATTRS_o_ai vec_any_lt(vector bool short __a,
16867 vector unsigned short __b) {
16868 return __builtin_altivec_vcmpgtuh_p(__CR6_EQ_REV, __b,
16869 (vector unsigned short)__a);
16870}
16871
16872static __inline__ int __ATTRS_o_ai vec_any_lt(vector bool short __a,
16873 vector bool short __b) {
16874 return __builtin_altivec_vcmpgtuh_p(__CR6_EQ_REV, (vector unsigned short)__b,
16875 (vector unsigned short)__a);
16876}
16877
16878static __inline__ int __ATTRS_o_ai vec_any_lt(vector int __a, vector int __b) {
16879 return __builtin_altivec_vcmpgtsw_p(__CR6_EQ_REV, __b, __a);
16880}
16881
16882static __inline__ int __ATTRS_o_ai vec_any_lt(vector int __a,
16883 vector bool int __b) {
16884 return __builtin_altivec_vcmpgtsw_p(__CR6_EQ_REV, (vector int)__b, __a);
16885}
16886
16887static __inline__ int __ATTRS_o_ai vec_any_lt(vector unsigned int __a,
16888 vector unsigned int __b) {
16889 return __builtin_altivec_vcmpgtuw_p(__CR6_EQ_REV, __b, __a);
16890}
16891
16892static __inline__ int __ATTRS_o_ai vec_any_lt(vector unsigned int __a,
16893 vector bool int __b) {
16894 return __builtin_altivec_vcmpgtuw_p(__CR6_EQ_REV, (vector unsigned int)__b,
16895 __a);
16896}
16897
16898static __inline__ int __ATTRS_o_ai vec_any_lt(vector bool int __a,
16899 vector int __b) {
16900 return __builtin_altivec_vcmpgtsw_p(__CR6_EQ_REV, __b,
16901 (vector signed int)__a);
16902}
16903
16904static __inline__ int __ATTRS_o_ai vec_any_lt(vector bool int __a,
16905 vector unsigned int __b) {
16906 return __builtin_altivec_vcmpgtuw_p(__CR6_EQ_REV, __b,
16907 (vector unsigned int)__a);
16908}
16909
16910static __inline__ int __ATTRS_o_ai vec_any_lt(vector bool int __a,
16911 vector bool int __b) {
16912 return __builtin_altivec_vcmpgtuw_p(__CR6_EQ_REV, (vector unsigned int)__b,
16913 (vector unsigned int)__a);
16914}
16915
16916#ifdef __VSX__
16917static __inline__ int __ATTRS_o_ai vec_any_lt(vector signed long long __a,
16918 vector signed long long __b) {
16919 return __builtin_altivec_vcmpgtsd_p(__CR6_EQ_REV, __b, __a);
16920}
16921
16922static __inline__ int __ATTRS_o_ai vec_any_lt(vector unsigned long long __a,
16923 vector unsigned long long __b) {
16924 return __builtin_altivec_vcmpgtud_p(__CR6_EQ_REV, __b, __a);
16925}
16926
16927static __inline__ int __ATTRS_o_ai vec_any_lt(vector signed long long __a,
16928 vector bool long long __b) {
16929 return __builtin_altivec_vcmpgtsd_p(__CR6_EQ_REV,
16930 (vector signed long long)__b, __a);
16931}
16932
16933static __inline__ int __ATTRS_o_ai vec_any_lt(vector unsigned long long __a,
16934 vector bool long long __b) {
16935 return __builtin_altivec_vcmpgtud_p(__CR6_EQ_REV,
16936 (vector unsigned long long)__b, __a);
16937}
16938
16939static __inline__ int __ATTRS_o_ai vec_any_lt(vector bool long long __a,
16940 vector signed long long __b) {
16941 return __builtin_altivec_vcmpgtsd_p(__CR6_EQ_REV, __b,
16942 (vector signed long long)__a);
16943}
16944
16945static __inline__ int __ATTRS_o_ai vec_any_lt(vector bool long long __a,
16946 vector unsigned long long __b) {
16947 return __builtin_altivec_vcmpgtud_p(__CR6_EQ_REV, __b,
16948 (vector unsigned long long)__a);
16949}
16950
16951static __inline__ int __ATTRS_o_ai vec_any_lt(vector bool long long __a,
16952 vector bool long long __b) {
16953 return __builtin_altivec_vcmpgtud_p(__CR6_EQ_REV,
16954 (vector unsigned long long)__b,
16955 (vector unsigned long long)__a);
16956}
16957#endif
16958
16959static __inline__ int __ATTRS_o_ai vec_any_lt(vector float __a,
16960 vector float __b) {
16961#ifdef __VSX__
16962 return __builtin_vsx_xvcmpgtsp_p(__CR6_EQ_REV, __b, __a);
16963#else
16964 return __builtin_altivec_vcmpgtfp_p(__CR6_EQ_REV, __b, __a);
16965#endif
16966}
16967
16968#ifdef __VSX__
16969static __inline__ int __ATTRS_o_ai vec_any_lt(vector double __a,
16970 vector double __b) {
16971 return __builtin_vsx_xvcmpgtdp_p(__CR6_EQ_REV, __b, __a);
16972}
16973#endif
16974
16975#if defined(__POWER10_VECTOR__) && defined(__SIZEOF_INT128__)
16976static __inline__ int __ATTRS_o_ai vec_any_lt(vector signed __int128 __a,
16977 vector signed __int128 __b) {
16978 return __builtin_altivec_vcmpgtsq_p(__CR6_EQ_REV, __b, __a);
16979}
16980
16981static __inline__ int __ATTRS_o_ai vec_any_lt(vector unsigned __int128 __a,
16982 vector unsigned __int128 __b) {
16983 return __builtin_altivec_vcmpgtuq_p(__CR6_EQ_REV, __b, __a);
16984}
16985#endif
16986
16987/* vec_any_nan */
16988
16989static __inline__ int __ATTRS_o_ai vec_any_nan(vector float __a) {
16990#ifdef __VSX__
16991 return __builtin_vsx_xvcmpeqsp_p(__CR6_LT_REV, __a, __a);
16992#else
16993 return __builtin_altivec_vcmpeqfp_p(__CR6_LT_REV, __a, __a);
16994#endif
16995}
16996#ifdef __VSX__
16997static __inline__ int __ATTRS_o_ai vec_any_nan(vector double __a) {
16998 return __builtin_vsx_xvcmpeqdp_p(__CR6_LT_REV, __a, __a);
16999}
17000#endif
17001
17002/* vec_any_ne */
17003
17004static __inline__ int __ATTRS_o_ai vec_any_ne(vector signed char __a,
17005 vector signed char __b) {
17006 return __builtin_altivec_vcmpequb_p(__CR6_LT_REV, (vector char)__a,
17007 (vector char)__b);
17008}
17009
17010static __inline__ int __ATTRS_o_ai vec_any_ne(vector signed char __a,
17011 vector bool char __b) {
17012 return __builtin_altivec_vcmpequb_p(__CR6_LT_REV, (vector char)__a,
17013 (vector char)__b);
17014}
17015
17016static __inline__ int __ATTRS_o_ai vec_any_ne(vector unsigned char __a,
17017 vector unsigned char __b) {
17018 return __builtin_altivec_vcmpequb_p(__CR6_LT_REV, (vector char)__a,
17019 (vector char)__b);
17020}
17021
17022static __inline__ int __ATTRS_o_ai vec_any_ne(vector unsigned char __a,
17023 vector bool char __b) {
17024 return __builtin_altivec_vcmpequb_p(__CR6_LT_REV, (vector char)__a,
17025 (vector char)__b);
17026}
17027
17028static __inline__ int __ATTRS_o_ai vec_any_ne(vector bool char __a,
17029 vector signed char __b) {
17030 return __builtin_altivec_vcmpequb_p(__CR6_LT_REV, (vector char)__a,
17031 (vector char)__b);
17032}
17033
17034static __inline__ int __ATTRS_o_ai vec_any_ne(vector bool char __a,
17035 vector unsigned char __b) {
17036 return __builtin_altivec_vcmpequb_p(__CR6_LT_REV, (vector char)__a,
17037 (vector char)__b);
17038}
17039
17040static __inline__ int __ATTRS_o_ai vec_any_ne(vector bool char __a,
17041 vector bool char __b) {
17042 return __builtin_altivec_vcmpequb_p(__CR6_LT_REV, (vector char)__a,
17043 (vector char)__b);
17044}
17045
17046static __inline__ int __ATTRS_o_ai vec_any_ne(vector short __a,
17047 vector short __b) {
17048 return __builtin_altivec_vcmpequh_p(__CR6_LT_REV, __a, __b);
17049}
17050
17051static __inline__ int __ATTRS_o_ai vec_any_ne(vector short __a,
17052 vector bool short __b) {
17053 return __builtin_altivec_vcmpequh_p(__CR6_LT_REV, __a, (vector short)__b);
17054}
17055
17056static __inline__ int __ATTRS_o_ai vec_any_ne(vector unsigned short __a,
17057 vector unsigned short __b) {
17058 return __builtin_altivec_vcmpequh_p(__CR6_LT_REV, (vector short)__a,
17059 (vector short)__b);
17060}
17061
17062static __inline__ int __ATTRS_o_ai vec_any_ne(vector unsigned short __a,
17063 vector bool short __b) {
17064 return __builtin_altivec_vcmpequh_p(__CR6_LT_REV, (vector short)__a,
17065 (vector short)__b);
17066}
17067
17068static __inline__ int __ATTRS_o_ai vec_any_ne(vector bool short __a,
17069 vector short __b) {
17070 return __builtin_altivec_vcmpequh_p(__CR6_LT_REV, (vector short)__a,
17071 (vector short)__b);
17072}
17073
17074static __inline__ int __ATTRS_o_ai vec_any_ne(vector bool short __a,
17075 vector unsigned short __b) {
17076 return __builtin_altivec_vcmpequh_p(__CR6_LT_REV, (vector short)__a,
17077 (vector short)__b);
17078}
17079
17080static __inline__ int __ATTRS_o_ai vec_any_ne(vector bool short __a,
17081 vector bool short __b) {
17082 return __builtin_altivec_vcmpequh_p(__CR6_LT_REV, (vector short)__a,
17083 (vector short)__b);
17084}
17085
17086static __inline__ int __ATTRS_o_ai vec_any_ne(vector pixel __a,
17087 vector pixel __b) {
17088 return __builtin_altivec_vcmpequh_p(__CR6_LT_REV, (vector short)__a,
17089 (vector short)__b);
17090}
17091
17092static __inline__ int __ATTRS_o_ai vec_any_ne(vector int __a, vector int __b) {
17093 return __builtin_altivec_vcmpequw_p(__CR6_LT_REV, __a, __b);
17094}
17095
17096static __inline__ int __ATTRS_o_ai vec_any_ne(vector int __a,
17097 vector bool int __b) {
17098 return __builtin_altivec_vcmpequw_p(__CR6_LT_REV, __a, (vector int)__b);
17099}
17100
17101static __inline__ int __ATTRS_o_ai vec_any_ne(vector unsigned int __a,
17102 vector unsigned int __b) {
17103 return __builtin_altivec_vcmpequw_p(__CR6_LT_REV, (vector int)__a,
17104 (vector int)__b);
17105}
17106
17107static __inline__ int __ATTRS_o_ai vec_any_ne(vector unsigned int __a,
17108 vector bool int __b) {
17109 return __builtin_altivec_vcmpequw_p(__CR6_LT_REV, (vector int)__a,
17110 (vector int)__b);
17111}
17112
17113static __inline__ int __ATTRS_o_ai vec_any_ne(vector bool int __a,
17114 vector int __b) {
17115 return __builtin_altivec_vcmpequw_p(__CR6_LT_REV, (vector int)__a,
17116 (vector int)__b);
17117}
17118
17119static __inline__ int __ATTRS_o_ai vec_any_ne(vector bool int __a,
17120 vector unsigned int __b) {
17121 return __builtin_altivec_vcmpequw_p(__CR6_LT_REV, (vector int)__a,
17122 (vector int)__b);
17123}
17124
17125static __inline__ int __ATTRS_o_ai vec_any_ne(vector bool int __a,
17126 vector bool int __b) {
17127 return __builtin_altivec_vcmpequw_p(__CR6_LT_REV, (vector int)__a,
17128 (vector int)__b);
17129}
17130
17131#ifdef __VSX__
17132static __inline__ int __ATTRS_o_ai vec_any_ne(vector signed long long __a,
17133 vector signed long long __b) {
17134#ifdef __POWER8_VECTOR__
17135 return __builtin_altivec_vcmpequd_p(__CR6_LT_REV, __a, __b);
17136#else
17137 // Take advantage of the optimized sequence for vec_all_eq when vcmpequd is
17138 // not available.
17139 return !vec_all_eq(__a, __b);
17140#endif
17141}
17142
17143static __inline__ int __ATTRS_o_ai vec_any_ne(vector unsigned long long __a,
17144 vector unsigned long long __b) {
17145 return vec_any_ne((vector signed long long)__a, (vector signed long long)__b);
17146}
17147
17148static __inline__ int __ATTRS_o_ai vec_any_ne(vector signed long long __a,
17149 vector bool long long __b) {
17150 return vec_any_ne((vector signed long long)__a, (vector signed long long)__b);
17151}
17152
17153static __inline__ int __ATTRS_o_ai vec_any_ne(vector unsigned long long __a,
17154 vector bool long long __b) {
17155 return vec_any_ne((vector signed long long)__a, (vector signed long long)__b);
17156}
17157
17158static __inline__ int __ATTRS_o_ai vec_any_ne(vector bool long long __a,
17159 vector signed long long __b) {
17160 return vec_any_ne((vector signed long long)__a, (vector signed long long)__b);
17161}
17162
17163static __inline__ int __ATTRS_o_ai vec_any_ne(vector bool long long __a,
17164 vector unsigned long long __b) {
17165 return vec_any_ne((vector signed long long)__a, (vector signed long long)__b);
17166}
17167
17168static __inline__ int __ATTRS_o_ai vec_any_ne(vector bool long long __a,
17169 vector bool long long __b) {
17170 return vec_any_ne((vector signed long long)__a, (vector signed long long)__b);
17171}
17172#endif
17173
17174static __inline__ int __ATTRS_o_ai vec_any_ne(vector float __a,
17175 vector float __b) {
17176#ifdef __VSX__
17177 return __builtin_vsx_xvcmpeqsp_p(__CR6_LT_REV, __a, __b);
17178#else
17179 return __builtin_altivec_vcmpeqfp_p(__CR6_LT_REV, __a, __b);
17180#endif
17181}
17182
17183#ifdef __VSX__
17184static __inline__ int __ATTRS_o_ai vec_any_ne(vector double __a,
17185 vector double __b) {
17186 return __builtin_vsx_xvcmpeqdp_p(__CR6_LT_REV, __a, __b);
17187}
17188#endif
17189
17190#if defined(__POWER10_VECTOR__) && defined(__SIZEOF_INT128__)
17191static __inline__ int __ATTRS_o_ai vec_any_ne(vector signed __int128 __a,
17192 vector signed __int128 __b) {
17193 return __builtin_altivec_vcmpequq_p(__CR6_LT_REV,
17194 (vector unsigned __int128)__a, __b);
17195}
17196
17197static __inline__ int __ATTRS_o_ai vec_any_ne(vector unsigned __int128 __a,
17198 vector unsigned __int128 __b) {
17199 return __builtin_altivec_vcmpequq_p(__CR6_LT_REV, __a,
17200 (vector signed __int128)__b);
17201}
17202
17203static __inline__ int __ATTRS_o_ai vec_any_ne(vector bool __int128 __a,
17204 vector bool __int128 __b) {
17205 return __builtin_altivec_vcmpequq_p(
17206 __CR6_LT_REV, (vector unsigned __int128)__a, (vector signed __int128)__b);
17207}
17208#endif
17209
17210/* vec_any_nge */
17211
17212static __inline__ int __ATTRS_o_ai vec_any_nge(vector float __a,
17213 vector float __b) {
17214#ifdef __VSX__
17215 return __builtin_vsx_xvcmpgesp_p(__CR6_LT_REV, __a, __b);
17216#else
17217 return __builtin_altivec_vcmpgefp_p(__CR6_LT_REV, __a, __b);
17218#endif
17219}
17220
17221#ifdef __VSX__
17222static __inline__ int __ATTRS_o_ai vec_any_nge(vector double __a,
17223 vector double __b) {
17224 return __builtin_vsx_xvcmpgedp_p(__CR6_LT_REV, __a, __b);
17225}
17226#endif
17227
17228/* vec_any_ngt */
17229
17230static __inline__ int __ATTRS_o_ai vec_any_ngt(vector float __a,
17231 vector float __b) {
17232#ifdef __VSX__
17233 return __builtin_vsx_xvcmpgtsp_p(__CR6_LT_REV, __a, __b);
17234#else
17235 return __builtin_altivec_vcmpgtfp_p(__CR6_LT_REV, __a, __b);
17236#endif
17237}
17238
17239#ifdef __VSX__
17240static __inline__ int __ATTRS_o_ai vec_any_ngt(vector double __a,
17241 vector double __b) {
17242 return __builtin_vsx_xvcmpgtdp_p(__CR6_LT_REV, __a, __b);
17243}
17244#endif
17245
17246/* vec_any_nle */
17247
17248static __inline__ int __ATTRS_o_ai vec_any_nle(vector float __a,
17249 vector float __b) {
17250#ifdef __VSX__
17251 return __builtin_vsx_xvcmpgesp_p(__CR6_LT_REV, __b, __a);
17252#else
17253 return __builtin_altivec_vcmpgefp_p(__CR6_LT_REV, __b, __a);
17254#endif
17255}
17256
17257#ifdef __VSX__
17258static __inline__ int __ATTRS_o_ai vec_any_nle(vector double __a,
17259 vector double __b) {
17260 return __builtin_vsx_xvcmpgedp_p(__CR6_LT_REV, __b, __a);
17261}
17262#endif
17263
17264/* vec_any_nlt */
17265
17266static __inline__ int __ATTRS_o_ai vec_any_nlt(vector float __a,
17267 vector float __b) {
17268#ifdef __VSX__
17269 return __builtin_vsx_xvcmpgtsp_p(__CR6_LT_REV, __b, __a);
17270#else
17271 return __builtin_altivec_vcmpgtfp_p(__CR6_LT_REV, __b, __a);
17272#endif
17273}
17274
17275#ifdef __VSX__
17276static __inline__ int __ATTRS_o_ai vec_any_nlt(vector double __a,
17277 vector double __b) {
17278 return __builtin_vsx_xvcmpgtdp_p(__CR6_LT_REV, __b, __a);
17279}
17280#endif
17281
17282/* vec_any_numeric */
17283
17284static __inline__ int __ATTRS_o_ai vec_any_numeric(vector float __a) {
17285#ifdef __VSX__
17286 return __builtin_vsx_xvcmpeqsp_p(__CR6_EQ_REV, __a, __a);
17287#else
17288 return __builtin_altivec_vcmpeqfp_p(__CR6_EQ_REV, __a, __a);
17289#endif
17290}
17291
17292#ifdef __VSX__
17293static __inline__ int __ATTRS_o_ai vec_any_numeric(vector double __a) {
17294 return __builtin_vsx_xvcmpeqdp_p(__CR6_EQ_REV, __a, __a);
17295}
17296#endif
17297
17298/* vec_any_out */
17299
17300static __inline__ int __attribute__((__always_inline__))
17301vec_any_out(vector float __a, vector float __b) {
17302 return __builtin_altivec_vcmpbfp_p(__CR6_EQ_REV, __a, __b);
17303}
17304
17305/* Power 8 Crypto functions
17306Note: We diverge from the current GCC implementation with regard
17307to cryptography and related functions as follows:
17308- Only the SHA and AES instructions and builtins are disabled by -mno-crypto
17309- The remaining ones are only available on Power8 and up so
17310 require -mpower8-vector
17311The justification for this is that export requirements require that
17312Category:Vector.Crypto is optional (i.e. compliant hardware may not provide
17313support). As a result, we need to be able to turn off support for those.
17314The remaining ones (currently controlled by -mcrypto for GCC) still
17315need to be provided on compliant hardware even if Vector.Crypto is not
17316provided.
17317*/
17318#ifdef __CRYPTO__
17319#define vec_sbox_be __builtin_altivec_crypto_vsbox
17320#define vec_cipher_be __builtin_altivec_crypto_vcipher
17321#define vec_cipherlast_be __builtin_altivec_crypto_vcipherlast
17322#define vec_ncipher_be __builtin_altivec_crypto_vncipher
17323#define vec_ncipherlast_be __builtin_altivec_crypto_vncipherlast
17324
17325#ifdef __VSX__
17326static __inline__ vector unsigned long long __attribute__((__always_inline__))
17327__builtin_crypto_vsbox(vector unsigned long long __a) {
17328 return __builtin_altivec_crypto_vsbox(__a);
17329}
17330
17331static __inline__ vector unsigned long long __attribute__((__always_inline__))
17332__builtin_crypto_vcipher(vector unsigned long long __a,
17333 vector unsigned long long __b) {
17334 return __builtin_altivec_crypto_vcipher(__a, __b);
17335}
17336
17337static __inline__ vector unsigned long long __attribute__((__always_inline__))
17338__builtin_crypto_vcipherlast(vector unsigned long long __a,
17339 vector unsigned long long __b) {
17340 return __builtin_altivec_crypto_vcipherlast(__a, __b);
17341}
17342
17343static __inline__ vector unsigned long long __attribute__((__always_inline__))
17344__builtin_crypto_vncipher(vector unsigned long long __a,
17345 vector unsigned long long __b) {
17346 return __builtin_altivec_crypto_vncipher(__a, __b);
17347}
17348
17349static __inline__ vector unsigned long long __attribute__((__always_inline__))
17350__builtin_crypto_vncipherlast(vector unsigned long long __a,
17351 vector unsigned long long __b) {
17352 return __builtin_altivec_crypto_vncipherlast(__a, __b);
17353}
17354#endif /* __VSX__ */
17355
17356#define __builtin_crypto_vshasigmad __builtin_altivec_crypto_vshasigmad
17357#define __builtin_crypto_vshasigmaw __builtin_altivec_crypto_vshasigmaw
17358
17359#define vec_shasigma_be(X, Y, Z) \
17360 _Generic((X), vector unsigned int \
17361 : __builtin_crypto_vshasigmaw, vector unsigned long long \
17362 : __builtin_crypto_vshasigmad)((X), (Y), (Z))
17363#endif
17364
17365#ifdef __POWER8_VECTOR__
17366static __inline__ vector bool char __ATTRS_o_ai
17367vec_permxor(vector bool char __a, vector bool char __b,
17368 vector bool char __c) {
17369 return (vector bool char)__builtin_altivec_crypto_vpermxor(
17370 (vector unsigned char)__a, (vector unsigned char)__b,
17371 (vector unsigned char)__c);
17372}
17373
17374static __inline__ vector signed char __ATTRS_o_ai
17375vec_permxor(vector signed char __a, vector signed char __b,
17376 vector signed char __c) {
17377 return (vector signed char)__builtin_altivec_crypto_vpermxor(
17378 (vector unsigned char)__a, (vector unsigned char)__b,
17379 (vector unsigned char)__c);
17380}
17381
17382static __inline__ vector unsigned char __ATTRS_o_ai
17383vec_permxor(vector unsigned char __a, vector unsigned char __b,
17384 vector unsigned char __c) {
17385 return __builtin_altivec_crypto_vpermxor(__a, __b, __c);
17386}
17387
17388static __inline__ vector unsigned char __ATTRS_o_ai
17389__builtin_crypto_vpermxor(vector unsigned char __a, vector unsigned char __b,
17390 vector unsigned char __c) {
17391 return __builtin_altivec_crypto_vpermxor(__a, __b, __c);
17392}
17393
17394static __inline__ vector unsigned short __ATTRS_o_ai
17395__builtin_crypto_vpermxor(vector unsigned short __a, vector unsigned short __b,
17396 vector unsigned short __c) {
17397 return (vector unsigned short)__builtin_altivec_crypto_vpermxor(
17398 (vector unsigned char)__a, (vector unsigned char)__b,
17399 (vector unsigned char)__c);
17400}
17401
17402static __inline__ vector unsigned int __ATTRS_o_ai __builtin_crypto_vpermxor(
17403 vector unsigned int __a, vector unsigned int __b, vector unsigned int __c) {
17404 return (vector unsigned int)__builtin_altivec_crypto_vpermxor(
17405 (vector unsigned char)__a, (vector unsigned char)__b,
17406 (vector unsigned char)__c);
17407}
17408
17409static __inline__ vector unsigned long long __ATTRS_o_ai
17410__builtin_crypto_vpermxor(vector unsigned long long __a,
17411 vector unsigned long long __b,
17412 vector unsigned long long __c) {
17413 return (vector unsigned long long)__builtin_altivec_crypto_vpermxor(
17414 (vector unsigned char)__a, (vector unsigned char)__b,
17415 (vector unsigned char)__c);
17416}
17417
17418static __inline__ vector unsigned char __ATTRS_o_ai
17419__builtin_crypto_vpmsumb(vector unsigned char __a, vector unsigned char __b) {
17420 return __builtin_altivec_crypto_vpmsumb(__a, __b);
17421}
17422
17423static __inline__ vector unsigned short __ATTRS_o_ai
17424__builtin_crypto_vpmsumb(vector unsigned short __a, vector unsigned short __b) {
17425 return __builtin_altivec_crypto_vpmsumh(__a, __b);
17426}
17427
17428static __inline__ vector unsigned int __ATTRS_o_ai
17429__builtin_crypto_vpmsumb(vector unsigned int __a, vector unsigned int __b) {
17430 return __builtin_altivec_crypto_vpmsumw(__a, __b);
17431}
17432
17433static __inline__ vector unsigned long long __ATTRS_o_ai
17434__builtin_crypto_vpmsumb(vector unsigned long long __a,
17435 vector unsigned long long __b) {
17436 return __builtin_altivec_crypto_vpmsumd(__a, __b);
17437}
17438
17439static __inline__ vector signed char __ATTRS_o_ai
17440vec_vgbbd(vector signed char __a) {
17441 return (vector signed char)__builtin_altivec_vgbbd((vector unsigned char)__a);
17442}
17443
17444#define vec_pmsum_be __builtin_crypto_vpmsumb
17445#define vec_gb __builtin_altivec_vgbbd
17446
17447static __inline__ vector unsigned char __ATTRS_o_ai
17448vec_vgbbd(vector unsigned char __a) {
17449 return __builtin_altivec_vgbbd(__a);
17450}
17451
17452static __inline__ vector signed long long __ATTRS_o_ai
17453vec_gbb(vector signed long long __a) {
17454 return (vector signed long long)__builtin_altivec_vgbbd(
17455 (vector unsigned char)__a);
17456}
17457
17458static __inline__ vector unsigned long long __ATTRS_o_ai
17459vec_gbb(vector unsigned long long __a) {
17460 return (vector unsigned long long)__builtin_altivec_vgbbd(
17461 (vector unsigned char)__a);
17462}
17463
17464static __inline__ vector long long __ATTRS_o_ai
17465vec_vbpermq(vector signed char __a, vector signed char __b) {
17466 return (vector long long)__builtin_altivec_vbpermq((vector unsigned char)__a,
17467 (vector unsigned char)__b);
17468}
17469
17470static __inline__ vector long long __ATTRS_o_ai
17471vec_vbpermq(vector unsigned char __a, vector unsigned char __b) {
17472 return (vector long long)__builtin_altivec_vbpermq(__a, __b);
17473}
17474
17475#if defined(__powerpc64__) && defined(__SIZEOF_INT128__)
17476static __inline__ vector unsigned long long __ATTRS_o_ai
17477vec_bperm(vector unsigned __int128 __a, vector unsigned char __b) {
17478 return __builtin_altivec_vbpermq((vector unsigned char)__a,
17479 (vector unsigned char)__b);
17480}
17481#endif
17482static __inline__ vector unsigned char __ATTRS_o_ai
17483vec_bperm(vector unsigned char __a, vector unsigned char __b) {
17484 return (vector unsigned char)__builtin_altivec_vbpermq(__a, __b);
17485}
17486#endif // __POWER8_VECTOR__
17487#ifdef __POWER9_VECTOR__
17488static __inline__ vector unsigned long long __ATTRS_o_ai
17489vec_bperm(vector unsigned long long __a, vector unsigned char __b) {
17490 return __builtin_altivec_vbpermd(__a, __b);
17491}
17492#endif
17493
17494
17495/* vec_reve */
17496
17497static inline __ATTRS_o_ai vector bool char vec_reve(vector bool char __a) {
17498 return __builtin_shufflevector(__a, __a, 15, 14, 13, 12, 11, 10, 9, 8, 7, 6,
17499 5, 4, 3, 2, 1, 0);
17500}
17501
17502static inline __ATTRS_o_ai vector signed char vec_reve(vector signed char __a) {
17503 return __builtin_shufflevector(__a, __a, 15, 14, 13, 12, 11, 10, 9, 8, 7, 6,
17504 5, 4, 3, 2, 1, 0);
17505}
17506
17507static inline __ATTRS_o_ai vector unsigned char
17508vec_reve(vector unsigned char __a) {
17509 return __builtin_shufflevector(__a, __a, 15, 14, 13, 12, 11, 10, 9, 8, 7, 6,
17510 5, 4, 3, 2, 1, 0);
17511}
17512
17513static inline __ATTRS_o_ai vector bool int vec_reve(vector bool int __a) {
17514 return __builtin_shufflevector(__a, __a, 3, 2, 1, 0);
17515}
17516
17517static inline __ATTRS_o_ai vector signed int vec_reve(vector signed int __a) {
17518 return __builtin_shufflevector(__a, __a, 3, 2, 1, 0);
17519}
17520
17521static inline __ATTRS_o_ai vector unsigned int
17522vec_reve(vector unsigned int __a) {
17523 return __builtin_shufflevector(__a, __a, 3, 2, 1, 0);
17524}
17525
17526static inline __ATTRS_o_ai vector bool short vec_reve(vector bool short __a) {
17527 return __builtin_shufflevector(__a, __a, 7, 6, 5, 4, 3, 2, 1, 0);
17528}
17529
17530static inline __ATTRS_o_ai vector signed short
17531vec_reve(vector signed short __a) {
17532 return __builtin_shufflevector(__a, __a, 7, 6, 5, 4, 3, 2, 1, 0);
17533}
17534
17535static inline __ATTRS_o_ai vector unsigned short
17536vec_reve(vector unsigned short __a) {
17537 return __builtin_shufflevector(__a, __a, 7, 6, 5, 4, 3, 2, 1, 0);
17538}
17539
17540static inline __ATTRS_o_ai vector float vec_reve(vector float __a) {
17541 return __builtin_shufflevector(__a, __a, 3, 2, 1, 0);
17542}
17543
17544#ifdef __VSX__
17545static inline __ATTRS_o_ai vector bool long long
17546vec_reve(vector bool long long __a) {
17547 return __builtin_shufflevector(__a, __a, 1, 0);
17548}
17549
17550static inline __ATTRS_o_ai vector signed long long
17551vec_reve(vector signed long long __a) {
17552 return __builtin_shufflevector(__a, __a, 1, 0);
17553}
17554
17555static inline __ATTRS_o_ai vector unsigned long long
17556vec_reve(vector unsigned long long __a) {
17557 return __builtin_shufflevector(__a, __a, 1, 0);
17558}
17559
17560static inline __ATTRS_o_ai vector double vec_reve(vector double __a) {
17561 return __builtin_shufflevector(__a, __a, 1, 0);
17562}
17563#endif
17564
17565/* vec_revb */
17566static __inline__ vector bool char __ATTRS_o_ai
17567vec_revb(vector bool char __a) {
17568 return __a;
17569}
17570
17571static __inline__ vector signed char __ATTRS_o_ai
17572vec_revb(vector signed char __a) {
17573 return __a;
17574}
17575
17576static __inline__ vector unsigned char __ATTRS_o_ai
17577vec_revb(vector unsigned char __a) {
17578 return __a;
17579}
17580
17581static __inline__ vector bool short __ATTRS_o_ai
17582vec_revb(vector bool short __a) {
17583 vector unsigned char __indices =
17584 { 1, 0, 3, 2, 5, 4, 7, 6, 9, 8, 11, 10, 13, 12, 15, 14 };
17585 return vec_perm(__a, __a, __indices);
17586}
17587
17588static __inline__ vector signed short __ATTRS_o_ai
17589vec_revb(vector signed short __a) {
17590 vector unsigned char __indices =
17591 { 1, 0, 3, 2, 5, 4, 7, 6, 9, 8, 11, 10, 13, 12, 15, 14 };
17592 return vec_perm(__a, __a, __indices);
17593}
17594
17595static __inline__ vector unsigned short __ATTRS_o_ai
17596vec_revb(vector unsigned short __a) {
17597 vector unsigned char __indices =
17598 { 1, 0, 3, 2, 5, 4, 7, 6, 9, 8, 11, 10, 13, 12, 15, 14 };
17599 return vec_perm(__a, __a, __indices);
17600}
17601
17602static __inline__ vector bool int __ATTRS_o_ai
17603vec_revb(vector bool int __a) {
17604 vector unsigned char __indices =
17605 { 3, 2, 1, 0, 7, 6, 5, 4, 11, 10, 9, 8, 15, 14, 13, 12 };
17606 return vec_perm(__a, __a, __indices);
17607}
17608
17609static __inline__ vector signed int __ATTRS_o_ai
17610vec_revb(vector signed int __a) {
17611 vector unsigned char __indices =
17612 { 3, 2, 1, 0, 7, 6, 5, 4, 11, 10, 9, 8, 15, 14, 13, 12 };
17613 return vec_perm(__a, __a, __indices);
17614}
17615
17616static __inline__ vector unsigned int __ATTRS_o_ai
17617vec_revb(vector unsigned int __a) {
17618 vector unsigned char __indices =
17619 { 3, 2, 1, 0, 7, 6, 5, 4, 11, 10, 9, 8, 15, 14, 13, 12 };
17620 return vec_perm(__a, __a, __indices);
17621}
17622
17623static __inline__ vector float __ATTRS_o_ai
17624vec_revb(vector float __a) {
17625 vector unsigned char __indices =
17626 { 3, 2, 1, 0, 7, 6, 5, 4, 11, 10, 9, 8, 15, 14, 13, 12 };
17627 return vec_perm(__a, __a, __indices);
17628}
17629
17630#ifdef __VSX__
17631static __inline__ vector bool long long __ATTRS_o_ai
17632vec_revb(vector bool long long __a) {
17633 vector unsigned char __indices =
17634 { 7, 6, 5, 4, 3, 2, 1, 0, 15, 14, 13, 12, 11, 10, 9, 8 };
17635 return vec_perm(__a, __a, __indices);
17636}
17637
17638static __inline__ vector signed long long __ATTRS_o_ai
17639vec_revb(vector signed long long __a) {
17640 vector unsigned char __indices =
17641 { 7, 6, 5, 4, 3, 2, 1, 0, 15, 14, 13, 12, 11, 10, 9, 8 };
17642 return vec_perm(__a, __a, __indices);
17643}
17644
17645static __inline__ vector unsigned long long __ATTRS_o_ai
17646vec_revb(vector unsigned long long __a) {
17647 vector unsigned char __indices =
17648 { 7, 6, 5, 4, 3, 2, 1, 0, 15, 14, 13, 12, 11, 10, 9, 8 };
17649 return vec_perm(__a, __a, __indices);
17650}
17651
17652static __inline__ vector double __ATTRS_o_ai
17653vec_revb(vector double __a) {
17654 vector unsigned char __indices =
17655 { 7, 6, 5, 4, 3, 2, 1, 0, 15, 14, 13, 12, 11, 10, 9, 8 };
17656 return vec_perm(__a, __a, __indices);
17657}
17658#endif /* End __VSX__ */
17659
17660#if defined(__POWER8_VECTOR__) && defined(__powerpc64__) && \
17661 defined(__SIZEOF_INT128__)
17662static __inline__ vector signed __int128 __ATTRS_o_ai
17663vec_revb(vector signed __int128 __a) {
17664 vector unsigned char __indices =
17665 { 15, 14, 13, 12, 11, 10, 9, 8, 7, 6, 5, 4, 3, 2, 1, 0 };
17666 return (vector signed __int128)vec_perm((vector signed int)__a,
17667 (vector signed int)__a,
17668 __indices);
17669}
17670
17671static __inline__ vector unsigned __int128 __ATTRS_o_ai
17672vec_revb(vector unsigned __int128 __a) {
17673 vector unsigned char __indices =
17674 { 15, 14, 13, 12, 11, 10, 9, 8, 7, 6, 5, 4, 3, 2, 1, 0 };
17675 return (vector unsigned __int128)vec_perm((vector signed int)__a,
17676 (vector signed int)__a,
17677 __indices);
17678}
17679#endif /* END __POWER8_VECTOR__ && __powerpc64__ */
17680
17681/* vec_xl */
17682
17683#define vec_xld2 vec_xl
17684#define vec_xlw4 vec_xl
17685typedef vector signed char unaligned_vec_schar __attribute__((aligned(1)));
17686typedef vector unsigned char unaligned_vec_uchar __attribute__((aligned(1)));
17687typedef vector signed short unaligned_vec_sshort __attribute__((aligned(1)));
17688typedef vector unsigned short unaligned_vec_ushort __attribute__((aligned(1)));
17689typedef vector signed int unaligned_vec_sint __attribute__((aligned(1)));
17690typedef vector unsigned int unaligned_vec_uint __attribute__((aligned(1)));
17691typedef vector float unaligned_vec_float __attribute__((aligned(1)));
17692
17693static inline __ATTRS_o_ai vector signed char vec_xl(ptrdiff_t __offset,
17694 const signed char *__ptr) {
17695 return *(unaligned_vec_schar *)(__ptr + __offset);
17696}
17697
17698static inline __ATTRS_o_ai vector unsigned char
17699vec_xl(ptrdiff_t __offset, const unsigned char *__ptr) {
17700 return *(unaligned_vec_uchar*)(__ptr + __offset);
17701}
17702
17703static inline __ATTRS_o_ai vector signed short
17704vec_xl(ptrdiff_t __offset, const signed short *__ptr) {
17705 signed char *__addr = (signed char *)__ptr + __offset;
17706 return *(unaligned_vec_sshort *)__addr;
17707}
17708
17709static inline __ATTRS_o_ai vector unsigned short
17710vec_xl(ptrdiff_t __offset, const unsigned short *__ptr) {
17711 signed char *__addr = (signed char *)__ptr + __offset;
17712 return *(unaligned_vec_ushort *)__addr;
17713}
17714
17715static inline __ATTRS_o_ai vector signed int vec_xl(ptrdiff_t __offset,
17716 const signed int *__ptr) {
17717 signed char *__addr = (signed char *)__ptr + __offset;
17718 return *(unaligned_vec_sint *)__addr;
17719}
17720
17721static inline __ATTRS_o_ai vector unsigned int
17722vec_xl(ptrdiff_t __offset, const unsigned int *__ptr) {
17723 signed char *__addr = (signed char *)__ptr + __offset;
17724 return *(unaligned_vec_uint *)__addr;
17725}
17726
17727static inline __ATTRS_o_ai vector float vec_xl(ptrdiff_t __offset,
17728 const float *__ptr) {
17729 signed char *__addr = (signed char *)__ptr + __offset;
17730 return *(unaligned_vec_float *)__addr;
17731}
17732
17733#ifdef __VSX__
17734typedef vector signed long long unaligned_vec_sll __attribute__((aligned(1)));
17735typedef vector unsigned long long unaligned_vec_ull __attribute__((aligned(1)));
17736typedef vector double unaligned_vec_double __attribute__((aligned(1)));
17737
17738static inline __ATTRS_o_ai vector signed long long
17739vec_xl(ptrdiff_t __offset, const signed long long *__ptr) {
17740 signed char *__addr = (signed char *)__ptr + __offset;
17741 return *(unaligned_vec_sll *)__addr;
17742}
17743
17744static inline __ATTRS_o_ai vector unsigned long long
17745vec_xl(ptrdiff_t __offset, const unsigned long long *__ptr) {
17746 signed char *__addr = (signed char *)__ptr + __offset;
17747 return *(unaligned_vec_ull *)__addr;
17748}
17749
17750static inline __ATTRS_o_ai vector double vec_xl(ptrdiff_t __offset,
17751 const double *__ptr) {
17752 signed char *__addr = (signed char *)__ptr + __offset;
17753 return *(unaligned_vec_double *)__addr;
17754}
17755#endif
17756
17757#if defined(__POWER8_VECTOR__) && defined(__powerpc64__) && \
17758 defined(__SIZEOF_INT128__)
17759typedef vector signed __int128 unaligned_vec_si128 __attribute__((aligned(1)));
17760typedef vector unsigned __int128 unaligned_vec_ui128
17761 __attribute__((aligned(1)));
17762static inline __ATTRS_o_ai vector signed __int128
17763vec_xl(ptrdiff_t __offset, const signed __int128 *__ptr) {
17764 signed char *__addr = (signed char *)__ptr + __offset;
17765 return *(unaligned_vec_si128 *)__addr;
17766}
17767
17768static inline __ATTRS_o_ai vector unsigned __int128
17769vec_xl(ptrdiff_t __offset, const unsigned __int128 *__ptr) {
17770 signed char *__addr = (signed char *)__ptr + __offset;
17771 return *(unaligned_vec_ui128 *)__addr;
17772}
17773#endif
17774
17775/* vec_xl_be */
17776
17777#ifdef __LITTLE_ENDIAN__
17778static __inline__ vector signed char __ATTRS_o_ai
17779vec_xl_be(ptrdiff_t __offset, const signed char *__ptr) {
17780 vector signed char __vec = (vector signed char)__builtin_vsx_lxvd2x_be(__offset, __ptr);
17781 return __builtin_shufflevector(__vec, __vec, 7, 6, 5, 4, 3, 2, 1, 0, 15, 14,
17782 13, 12, 11, 10, 9, 8);
17783}
17784
17785static __inline__ vector unsigned char __ATTRS_o_ai
17786vec_xl_be(ptrdiff_t __offset, const unsigned char *__ptr) {
17787 vector unsigned char __vec = (vector unsigned char)__builtin_vsx_lxvd2x_be(__offset, __ptr);
17788 return __builtin_shufflevector(__vec, __vec, 7, 6, 5, 4, 3, 2, 1, 0, 15, 14,
17789 13, 12, 11, 10, 9, 8);
17790}
17791
17792static __inline__ vector signed short __ATTRS_o_ai
17793vec_xl_be(ptrdiff_t __offset, const signed short *__ptr) {
17794 vector signed short __vec = (vector signed short)__builtin_vsx_lxvd2x_be(__offset, __ptr);
17795 return __builtin_shufflevector(__vec, __vec, 3, 2, 1, 0, 7, 6, 5, 4);
17796}
17797
17798static __inline__ vector unsigned short __ATTRS_o_ai
17799vec_xl_be(ptrdiff_t __offset, const unsigned short *__ptr) {
17800 vector unsigned short __vec = (vector unsigned short)__builtin_vsx_lxvd2x_be(__offset, __ptr);
17801 return __builtin_shufflevector(__vec, __vec, 3, 2, 1, 0, 7, 6, 5, 4);
17802}
17803
17804static __inline__ vector signed int __ATTRS_o_ai
17805vec_xl_be(signed long long __offset, const signed int *__ptr) {
17806 return (vector signed int)__builtin_vsx_lxvw4x_be(__offset, __ptr);
17807}
17808
17809static __inline__ vector unsigned int __ATTRS_o_ai
17810vec_xl_be(signed long long __offset, const unsigned int *__ptr) {
17811 return (vector unsigned int)__builtin_vsx_lxvw4x_be(__offset, __ptr);
17812}
17813
17814static __inline__ vector float __ATTRS_o_ai
17815vec_xl_be(signed long long __offset, const float *__ptr) {
17816 return (vector float)__builtin_vsx_lxvw4x_be(__offset, __ptr);
17817}
17818
17819#ifdef __VSX__
17820static __inline__ vector signed long long __ATTRS_o_ai
17821vec_xl_be(signed long long __offset, const signed long long *__ptr) {
17822 return (vector signed long long)__builtin_vsx_lxvd2x_be(__offset, __ptr);
17823}
17824
17825static __inline__ vector unsigned long long __ATTRS_o_ai
17826vec_xl_be(signed long long __offset, const unsigned long long *__ptr) {
17827 return (vector unsigned long long)__builtin_vsx_lxvd2x_be(__offset, __ptr);
17828}
17829
17830static __inline__ vector double __ATTRS_o_ai
17831vec_xl_be(signed long long __offset, const double *__ptr) {
17832 return (vector double)__builtin_vsx_lxvd2x_be(__offset, __ptr);
17833}
17834#endif
17835
17836#if defined(__POWER8_VECTOR__) && defined(__powerpc64__) && \
17837 defined(__SIZEOF_INT128__)
17838static __inline__ vector signed __int128 __ATTRS_o_ai
17839vec_xl_be(signed long long __offset, const signed __int128 *__ptr) {
17840 return vec_xl(__offset, __ptr);
17841}
17842
17843static __inline__ vector unsigned __int128 __ATTRS_o_ai
17844vec_xl_be(signed long long __offset, const unsigned __int128 *__ptr) {
17845 return vec_xl(__offset, __ptr);
17846}
17847#endif
17848#else
17849 #define vec_xl_be vec_xl
17850#endif
17851
17852#if defined(__POWER10_VECTOR__) && defined(__VSX__) && \
17853 defined(__SIZEOF_INT128__)
17854
17855/* vec_xl_sext */
17856
17857static __inline__ vector signed __int128 __ATTRS_o_ai
17858vec_xl_sext(ptrdiff_t __offset, const signed char *__pointer) {
17859 return (vector signed __int128)*(__pointer + __offset);
17860}
17861
17862static __inline__ vector signed __int128 __ATTRS_o_ai
17863vec_xl_sext(ptrdiff_t __offset, const signed short *__pointer) {
17864 return (vector signed __int128)*(__pointer + __offset);
17865}
17866
17867static __inline__ vector signed __int128 __ATTRS_o_ai
17868vec_xl_sext(ptrdiff_t __offset, const signed int *__pointer) {
17869 return (vector signed __int128)*(__pointer + __offset);
17870}
17871
17872static __inline__ vector signed __int128 __ATTRS_o_ai
17873vec_xl_sext(ptrdiff_t __offset, const signed long long *__pointer) {
17874 return (vector signed __int128)*(__pointer + __offset);
17875}
17876
17877/* vec_xl_zext */
17878
17879static __inline__ vector unsigned __int128 __ATTRS_o_ai
17880vec_xl_zext(ptrdiff_t __offset, const unsigned char *__pointer) {
17881 return (vector unsigned __int128)*(__pointer + __offset);
17882}
17883
17884static __inline__ vector unsigned __int128 __ATTRS_o_ai
17885vec_xl_zext(ptrdiff_t __offset, const unsigned short *__pointer) {
17886 return (vector unsigned __int128)*(__pointer + __offset);
17887}
17888
17889static __inline__ vector unsigned __int128 __ATTRS_o_ai
17890vec_xl_zext(ptrdiff_t __offset, const unsigned int *__pointer) {
17891 return (vector unsigned __int128)*(__pointer + __offset);
17892}
17893
17894static __inline__ vector unsigned __int128 __ATTRS_o_ai
17895vec_xl_zext(ptrdiff_t __offset, const unsigned long long *__pointer) {
17896 return (vector unsigned __int128)*(__pointer + __offset);
17897}
17898
17899#endif
17900
17901/* vec_xlds */
17902#ifdef __VSX__
17903static __inline__ vector signed long long __ATTRS_o_ai
17904vec_xlds(ptrdiff_t __offset, const signed long long *__ptr) {
17905 signed long long *__addr = (signed long long*)((signed char *)__ptr + __offset);
17906 return (vector signed long long) *__addr;
17907}
17908
17909static __inline__ vector unsigned long long __ATTRS_o_ai
17910vec_xlds(ptrdiff_t __offset, const unsigned long long *__ptr) {
17911 unsigned long long *__addr = (unsigned long long *)((signed char *)__ptr + __offset);
17912 return (unaligned_vec_ull) *__addr;
17913}
17914
17915static __inline__ vector double __ATTRS_o_ai vec_xlds(ptrdiff_t __offset,
17916 const double *__ptr) {
17917 double *__addr = (double*)((signed char *)__ptr + __offset);
17918 return (unaligned_vec_double) *__addr;
17919}
17920
17921/* vec_load_splats */
17922static __inline__ vector signed int __ATTRS_o_ai
17923vec_load_splats(signed long long __offset, const signed int *__ptr) {
17924 signed int *__addr = (signed int*)((signed char *)__ptr + __offset);
17925 return (vector signed int)*__addr;
17926}
17927
17928static __inline__ vector signed int __ATTRS_o_ai
17929vec_load_splats(unsigned long long __offset, const signed int *__ptr) {
17930 signed int *__addr = (signed int*)((signed char *)__ptr + __offset);
17931 return (vector signed int)*__addr;
17932}
17933
17934static __inline__ vector unsigned int __ATTRS_o_ai
17935vec_load_splats(signed long long __offset, const unsigned int *__ptr) {
17936 unsigned int *__addr = (unsigned int*)((signed char *)__ptr + __offset);
17937 return (vector unsigned int)*__addr;
17938}
17939
17940static __inline__ vector unsigned int __ATTRS_o_ai
17941vec_load_splats(unsigned long long __offset, const unsigned int *__ptr) {
17942 unsigned int *__addr = (unsigned int*)((signed char *)__ptr + __offset);
17943 return (vector unsigned int)*__addr;
17944}
17945
17946static __inline__ vector float __ATTRS_o_ai
17947vec_load_splats(signed long long __offset, const float *__ptr) {
17948 float *__addr = (float*)((signed char *)__ptr + __offset);
17949 return (vector float)*__addr;
17950}
17951
17952static __inline__ vector float __ATTRS_o_ai
17953vec_load_splats(unsigned long long __offset, const float *__ptr) {
17954 float *__addr = (float*)((signed char *)__ptr + __offset);
17955 return (vector float)*__addr;
17956}
17957#endif
17958
17959/* vec_xst */
17960
17961#define vec_xstd2 vec_xst
17962#define vec_xstw4 vec_xst
17963static inline __ATTRS_o_ai void
17964vec_xst(vector signed char __vec, ptrdiff_t __offset, signed char *__ptr) {
17965 *(unaligned_vec_schar *)(__ptr + __offset) = __vec;
17966}
17967
17968static inline __ATTRS_o_ai void
17969vec_xst(vector unsigned char __vec, ptrdiff_t __offset, unsigned char *__ptr) {
17970 *(unaligned_vec_uchar *)(__ptr + __offset) = __vec;
17971}
17972
17973static inline __ATTRS_o_ai void
17974vec_xst(vector signed short __vec, ptrdiff_t __offset, signed short *__ptr) {
17975 signed char *__addr = (signed char *)__ptr + __offset;
17976 *(unaligned_vec_sshort *)__addr = __vec;
17977}
17978
17979static inline __ATTRS_o_ai void vec_xst(vector unsigned short __vec,
17980 ptrdiff_t __offset,
17981 unsigned short *__ptr) {
17982 signed char *__addr = (signed char *)__ptr + __offset;
17983 *(unaligned_vec_ushort *)__addr = __vec;
17984}
17985
17986static inline __ATTRS_o_ai void vec_xst(vector signed int __vec,
17987 ptrdiff_t __offset, signed int *__ptr) {
17988 signed char *__addr = (signed char *)__ptr + __offset;
17989 *(unaligned_vec_sint *)__addr = __vec;
17990}
17991
17992static inline __ATTRS_o_ai void
17993vec_xst(vector unsigned int __vec, ptrdiff_t __offset, unsigned int *__ptr) {
17994 signed char *__addr = (signed char *)__ptr + __offset;
17995 *(unaligned_vec_uint *)__addr = __vec;
17996}
17997
17998static inline __ATTRS_o_ai void vec_xst(vector float __vec, ptrdiff_t __offset,
17999 float *__ptr) {
18000 signed char *__addr = (signed char *)__ptr + __offset;
18001 *(unaligned_vec_float *)__addr = __vec;
18002}
18003
18004#ifdef __VSX__
18005static inline __ATTRS_o_ai void vec_xst(vector signed long long __vec,
18006 ptrdiff_t __offset,
18007 signed long long *__ptr) {
18008 signed char *__addr = (signed char *)__ptr + __offset;
18009 *(unaligned_vec_sll *)__addr = __vec;
18010}
18011
18012static inline __ATTRS_o_ai void vec_xst(vector unsigned long long __vec,
18013 ptrdiff_t __offset,
18014 unsigned long long *__ptr) {
18015 signed char *__addr = (signed char *)__ptr + __offset;
18016 *(unaligned_vec_ull *)__addr = __vec;
18017}
18018
18019static inline __ATTRS_o_ai void vec_xst(vector double __vec, ptrdiff_t __offset,
18020 double *__ptr) {
18021 signed char *__addr = (signed char *)__ptr + __offset;
18022 *(unaligned_vec_double *)__addr = __vec;
18023}
18024#endif
18025
18026#if defined(__POWER8_VECTOR__) && defined(__powerpc64__) && \
18027 defined(__SIZEOF_INT128__)
18028static inline __ATTRS_o_ai void vec_xst(vector signed __int128 __vec,
18029 ptrdiff_t __offset,
18030 signed __int128 *__ptr) {
18031 signed char *__addr = (signed char *)__ptr + __offset;
18032 *(unaligned_vec_si128 *)__addr = __vec;
18033}
18034
18035static inline __ATTRS_o_ai void vec_xst(vector unsigned __int128 __vec,
18036 ptrdiff_t __offset,
18037 unsigned __int128 *__ptr) {
18038 signed char *__addr = (signed char *)__ptr + __offset;
18039 *(unaligned_vec_ui128 *)__addr = __vec;
18040}
18041#endif
18042
18043/* vec_xst_trunc */
18044
18045#if defined(__POWER10_VECTOR__) && defined(__VSX__) && \
18046 defined(__SIZEOF_INT128__)
18047static inline __ATTRS_o_ai void vec_xst_trunc(vector signed __int128 __vec,
18048 ptrdiff_t __offset,
18049 signed char *__ptr) {
18050 *(__ptr + __offset) = (signed char)__vec[0];
18051}
18052
18053static inline __ATTRS_o_ai void vec_xst_trunc(vector unsigned __int128 __vec,
18054 ptrdiff_t __offset,
18055 unsigned char *__ptr) {
18056 *(__ptr + __offset) = (unsigned char)__vec[0];
18057}
18058
18059static inline __ATTRS_o_ai void vec_xst_trunc(vector signed __int128 __vec,
18060 ptrdiff_t __offset,
18061 signed short *__ptr) {
18062 *(__ptr + __offset) = (signed short)__vec[0];
18063}
18064
18065static inline __ATTRS_o_ai void vec_xst_trunc(vector unsigned __int128 __vec,
18066 ptrdiff_t __offset,
18067 unsigned short *__ptr) {
18068 *(__ptr + __offset) = (unsigned short)__vec[0];
18069}
18070
18071static inline __ATTRS_o_ai void vec_xst_trunc(vector signed __int128 __vec,
18072 ptrdiff_t __offset,
18073 signed int *__ptr) {
18074 *(__ptr + __offset) = (signed int)__vec[0];
18075}
18076
18077static inline __ATTRS_o_ai void vec_xst_trunc(vector unsigned __int128 __vec,
18078 ptrdiff_t __offset,
18079 unsigned int *__ptr) {
18080 *(__ptr + __offset) = (unsigned int)__vec[0];
18081}
18082
18083static inline __ATTRS_o_ai void vec_xst_trunc(vector signed __int128 __vec,
18084 ptrdiff_t __offset,
18085 signed long long *__ptr) {
18086 *(__ptr + __offset) = (signed long long)__vec[0];
18087}
18088
18089static inline __ATTRS_o_ai void vec_xst_trunc(vector unsigned __int128 __vec,
18090 ptrdiff_t __offset,
18091 unsigned long long *__ptr) {
18092 *(__ptr + __offset) = (unsigned long long)__vec[0];
18093}
18094#endif
18095
18096/* vec_xst_be */
18097
18098#ifdef __LITTLE_ENDIAN__
18099static __inline__ void __ATTRS_o_ai vec_xst_be(vector signed char __vec,
18100 signed long long __offset,
18101 signed char *__ptr) {
18102 vector signed char __tmp =
18103 __builtin_shufflevector(__vec, __vec, 7, 6, 5, 4, 3, 2, 1, 0, 15, 14,
18104 13, 12, 11, 10, 9, 8);
18105 typedef __attribute__((vector_size(sizeof(__tmp)))) double __vector_double;
18106 __builtin_vsx_stxvd2x_be((__vector_double)__tmp, __offset, __ptr);
18107}
18108
18109static __inline__ void __ATTRS_o_ai vec_xst_be(vector unsigned char __vec,
18110 signed long long __offset,
18111 unsigned char *__ptr) {
18112 vector unsigned char __tmp =
18113 __builtin_shufflevector(__vec, __vec, 7, 6, 5, 4, 3, 2, 1, 0, 15, 14,
18114 13, 12, 11, 10, 9, 8);
18115 typedef __attribute__((vector_size(sizeof(__tmp)))) double __vector_double;
18116 __builtin_vsx_stxvd2x_be((__vector_double)__tmp, __offset, __ptr);
18117}
18118
18119static __inline__ void __ATTRS_o_ai vec_xst_be(vector signed short __vec,
18120 signed long long __offset,
18121 signed short *__ptr) {
18122 vector signed short __tmp =
18123 __builtin_shufflevector(__vec, __vec, 3, 2, 1, 0, 7, 6, 5, 4);
18124 typedef __attribute__((vector_size(sizeof(__tmp)))) double __vector_double;
18125 __builtin_vsx_stxvd2x_be((__vector_double)__tmp, __offset, __ptr);
18126}
18127
18128static __inline__ void __ATTRS_o_ai vec_xst_be(vector unsigned short __vec,
18129 signed long long __offset,
18130 unsigned short *__ptr) {
18131 vector unsigned short __tmp =
18132 __builtin_shufflevector(__vec, __vec, 3, 2, 1, 0, 7, 6, 5, 4);
18133 typedef __attribute__((vector_size(sizeof(__tmp)))) double __vector_double;
18134 __builtin_vsx_stxvd2x_be((__vector_double)__tmp, __offset, __ptr);
18135}
18136
18137static __inline__ void __ATTRS_o_ai vec_xst_be(vector signed int __vec,
18138 signed long long __offset,
18139 signed int *__ptr) {
18140 __builtin_vsx_stxvw4x_be(__vec, __offset, __ptr);
18141}
18142
18143static __inline__ void __ATTRS_o_ai vec_xst_be(vector unsigned int __vec,
18144 signed long long __offset,
18145 unsigned int *__ptr) {
18146 __builtin_vsx_stxvw4x_be((vector int)__vec, __offset, __ptr);
18147}
18148
18149static __inline__ void __ATTRS_o_ai vec_xst_be(vector float __vec,
18150 signed long long __offset,
18151 float *__ptr) {
18152 __builtin_vsx_stxvw4x_be((vector int)__vec, __offset, __ptr);
18153}
18154
18155#ifdef __VSX__
18156static __inline__ void __ATTRS_o_ai vec_xst_be(vector signed long long __vec,
18157 signed long long __offset,
18158 signed long long *__ptr) {
18159 __builtin_vsx_stxvd2x_be((vector double)__vec, __offset, __ptr);
18160}
18161
18162static __inline__ void __ATTRS_o_ai vec_xst_be(vector unsigned long long __vec,
18163 signed long long __offset,
18164 unsigned long long *__ptr) {
18165 __builtin_vsx_stxvd2x_be((vector double)__vec, __offset, __ptr);
18166}
18167
18168static __inline__ void __ATTRS_o_ai vec_xst_be(vector double __vec,
18169 signed long long __offset,
18170 double *__ptr) {
18171 __builtin_vsx_stxvd2x_be((vector double)__vec, __offset, __ptr);
18172}
18173#endif
18174
18175#if defined(__POWER8_VECTOR__) && defined(__powerpc64__) && \
18176 defined(__SIZEOF_INT128__)
18177static __inline__ void __ATTRS_o_ai vec_xst_be(vector signed __int128 __vec,
18178 signed long long __offset,
18179 signed __int128 *__ptr) {
18180 vec_xst(__vec, __offset, __ptr);
18181}
18182
18183static __inline__ void __ATTRS_o_ai vec_xst_be(vector unsigned __int128 __vec,
18184 signed long long __offset,
18185 unsigned __int128 *__ptr) {
18186 vec_xst(__vec, __offset, __ptr);
18187}
18188#endif
18189#else
18190 #define vec_xst_be vec_xst
18191#endif
18192
18193#ifdef __POWER9_VECTOR__
18194#define vec_test_data_class(__a, __b) \
18195 _Generic( \
18196 (__a), vector float \
18197 : (vector bool int)__builtin_vsx_xvtstdcsp((vector float)(__a), (__b)), \
18198 vector double \
18199 : (vector bool long long)__builtin_vsx_xvtstdcdp((vector double)(__a), \
18200 (__b)))
18201
18202#endif /* #ifdef __POWER9_VECTOR__ */
18203
18204static vector float __ATTRS_o_ai vec_neg(vector float __a) {
18205 return -__a;
18206}
18207
18208#ifdef __VSX__
18209static vector double __ATTRS_o_ai vec_neg(vector double __a) {
18210 return -__a;
18211}
18212
18213#endif
18214
18215#ifdef __VSX__
18216static vector long long __ATTRS_o_ai vec_neg(vector long long __a) {
18217 return -__a;
18218}
18219#endif
18220
18221static vector signed int __ATTRS_o_ai vec_neg(vector signed int __a) {
18222 return -__a;
18223}
18224
18225static vector signed short __ATTRS_o_ai vec_neg(vector signed short __a) {
18226 return -__a;
18227}
18228
18229static vector signed char __ATTRS_o_ai vec_neg(vector signed char __a) {
18230 return -__a;
18231}
18232
18233static vector float __ATTRS_o_ai vec_nabs(vector float __a) {
18234 return - vec_abs(__a);
18235}
18236
18237#ifdef __VSX__
18238static vector double __ATTRS_o_ai vec_nabs(vector double __a) {
18239 return - vec_abs(__a);
18240}
18241
18242#endif
18243
18244#ifdef __POWER8_VECTOR__
18245static vector long long __ATTRS_o_ai vec_nabs(vector long long __a) {
18246 return __builtin_altivec_vminsd(__a, -__a);
18247}
18248#endif
18249
18250static vector signed int __ATTRS_o_ai vec_nabs(vector signed int __a) {
18251 return __builtin_altivec_vminsw(__a, -__a);
18252}
18253
18254static vector signed short __ATTRS_o_ai vec_nabs(vector signed short __a) {
18255 return __builtin_altivec_vminsh(__a, -__a);
18256}
18257
18258static vector signed char __ATTRS_o_ai vec_nabs(vector signed char __a) {
18259 return __builtin_altivec_vminsb(__a, -__a);
18260}
18261
18262static vector float __ATTRS_o_ai vec_recipdiv(vector float __a,
18263 vector float __b) {
18264 return __builtin_ppc_recipdivf(__a, __b);
18265}
18266
18267#ifdef __VSX__
18268static vector double __ATTRS_o_ai vec_recipdiv(vector double __a,
18269 vector double __b) {
18270 return __builtin_ppc_recipdivd(__a, __b);
18271}
18272#endif
18273
18274#ifdef __POWER10_VECTOR__
18275
18276/* vec_extractm */
18277
18278static __inline__ unsigned int __ATTRS_o_ai
18279vec_extractm(vector unsigned char __a) {
18280 return __builtin_altivec_vextractbm(__a);
18281}
18282
18283static __inline__ unsigned int __ATTRS_o_ai
18284vec_extractm(vector unsigned short __a) {
18285 return __builtin_altivec_vextracthm(__a);
18286}
18287
18288static __inline__ unsigned int __ATTRS_o_ai
18289vec_extractm(vector unsigned int __a) {
18290 return __builtin_altivec_vextractwm(__a);
18291}
18292
18293static __inline__ unsigned int __ATTRS_o_ai
18294vec_extractm(vector unsigned long long __a) {
18295 return __builtin_altivec_vextractdm(__a);
18296}
18297
18298#ifdef __SIZEOF_INT128__
18299static __inline__ unsigned int __ATTRS_o_ai
18300vec_extractm(vector unsigned __int128 __a) {
18301 return __builtin_altivec_vextractqm(__a);
18302}
18303#endif
18304
18305/* vec_expandm */
18306
18307static __inline__ vector unsigned char __ATTRS_o_ai
18308vec_expandm(vector unsigned char __a) {
18309 return __builtin_altivec_vexpandbm(__a);
18310}
18311
18312static __inline__ vector unsigned short __ATTRS_o_ai
18313vec_expandm(vector unsigned short __a) {
18314 return __builtin_altivec_vexpandhm(__a);
18315}
18316
18317static __inline__ vector unsigned int __ATTRS_o_ai
18318vec_expandm(vector unsigned int __a) {
18319 return __builtin_altivec_vexpandwm(__a);
18320}
18321
18322static __inline__ vector unsigned long long __ATTRS_o_ai
18323vec_expandm(vector unsigned long long __a) {
18324 return __builtin_altivec_vexpanddm(__a);
18325}
18326
18327#ifdef __SIZEOF_INT128__
18328static __inline__ vector unsigned __int128 __ATTRS_o_ai
18329vec_expandm(vector unsigned __int128 __a) {
18330 return __builtin_altivec_vexpandqm(__a);
18331}
18332#endif
18333
18334/* vec_cntm */
18335
18336#define vec_cntm(__a, __mp) \
18337 _Generic((__a), vector unsigned char \
18338 : __builtin_altivec_vcntmbb((vector unsigned char)(__a), \
18339 (unsigned char)(__mp)), \
18340 vector unsigned short \
18341 : __builtin_altivec_vcntmbh((vector unsigned short)(__a), \
18342 (unsigned char)(__mp)), \
18343 vector unsigned int \
18344 : __builtin_altivec_vcntmbw((vector unsigned int)(__a), \
18345 (unsigned char)(__mp)), \
18346 vector unsigned long long \
18347 : __builtin_altivec_vcntmbd((vector unsigned long long)(__a), \
18348 (unsigned char)(__mp)))
18349
18350/* vec_gen[b|h|w|d|q]m */
18351
18352static __inline__ vector unsigned char __ATTRS_o_ai
18353vec_genbm(unsigned long long __bm) {
18354 return __builtin_altivec_mtvsrbm(__bm);
18355}
18356
18357static __inline__ vector unsigned short __ATTRS_o_ai
18358vec_genhm(unsigned long long __bm) {
18359 return __builtin_altivec_mtvsrhm(__bm);
18360}
18361
18362static __inline__ vector unsigned int __ATTRS_o_ai
18363vec_genwm(unsigned long long __bm) {
18364 return __builtin_altivec_mtvsrwm(__bm);
18365}
18366
18367static __inline__ vector unsigned long long __ATTRS_o_ai
18368vec_gendm(unsigned long long __bm) {
18369 return __builtin_altivec_mtvsrdm(__bm);
18370}
18371
18372#ifdef __SIZEOF_INT128__
18373static __inline__ vector unsigned __int128 __ATTRS_o_ai
18374vec_genqm(unsigned long long __bm) {
18375 return __builtin_altivec_mtvsrqm(__bm);
18376}
18377#endif
18378
18379/* vec_pdep */
18380
18381static __inline__ vector unsigned long long __ATTRS_o_ai
18382vec_pdep(vector unsigned long long __a, vector unsigned long long __b) {
18383 return __builtin_altivec_vpdepd(__a, __b);
18384}
18385
18386/* vec_pext */
18387
18388static __inline__ vector unsigned long long __ATTRS_o_ai
18389vec_pext(vector unsigned long long __a, vector unsigned long long __b) {
18390 return __builtin_altivec_vpextd(__a, __b);
18391}
18392
18393/* vec_cfuge */
18394
18395static __inline__ vector unsigned long long __ATTRS_o_ai
18396vec_cfuge(vector unsigned long long __a, vector unsigned long long __b) {
18397 return __builtin_altivec_vcfuged(__a, __b);
18398}
18399
18400/* vec_gnb */
18401
18402#define vec_gnb(__a, __b) __builtin_altivec_vgnb(__a, __b)
18403
18404/* vec_ternarylogic */
18405#ifdef __VSX__
18406#ifdef __SIZEOF_INT128__
18407#define vec_ternarylogic(__a, __b, __c, __imm) \
18408 _Generic((__a), vector unsigned char \
18409 : (vector unsigned char)__builtin_vsx_xxeval( \
18410 (vector unsigned long long)(__a), \
18411 (vector unsigned long long)(__b), \
18412 (vector unsigned long long)(__c), (__imm)), \
18413 vector unsigned short \
18414 : (vector unsigned short)__builtin_vsx_xxeval( \
18415 (vector unsigned long long)(__a), \
18416 (vector unsigned long long)(__b), \
18417 (vector unsigned long long)(__c), (__imm)), \
18418 vector unsigned int \
18419 : (vector unsigned int)__builtin_vsx_xxeval( \
18420 (vector unsigned long long)(__a), \
18421 (vector unsigned long long)(__b), \
18422 (vector unsigned long long)(__c), (__imm)), \
18423 vector unsigned long long \
18424 : (vector unsigned long long)__builtin_vsx_xxeval( \
18425 (vector unsigned long long)(__a), \
18426 (vector unsigned long long)(__b), \
18427 (vector unsigned long long)(__c), (__imm)), \
18428 vector unsigned __int128 \
18429 : (vector unsigned __int128)__builtin_vsx_xxeval( \
18430 (vector unsigned long long)(__a), \
18431 (vector unsigned long long)(__b), \
18432 (vector unsigned long long)(__c), (__imm)))
18433#else
18434#define vec_ternarylogic(__a, __b, __c, __imm) \
18435 _Generic((__a), vector unsigned char \
18436 : (vector unsigned char)__builtin_vsx_xxeval( \
18437 (vector unsigned long long)(__a), \
18438 (vector unsigned long long)(__b), \
18439 (vector unsigned long long)(__c), (__imm)), \
18440 vector unsigned short \
18441 : (vector unsigned short)__builtin_vsx_xxeval( \
18442 (vector unsigned long long)(__a), \
18443 (vector unsigned long long)(__b), \
18444 (vector unsigned long long)(__c), (__imm)), \
18445 vector unsigned int \
18446 : (vector unsigned int)__builtin_vsx_xxeval( \
18447 (vector unsigned long long)(__a), \
18448 (vector unsigned long long)(__b), \
18449 (vector unsigned long long)(__c), (__imm)), \
18450 vector unsigned long long \
18451 : (vector unsigned long long)__builtin_vsx_xxeval( \
18452 (vector unsigned long long)(__a), \
18453 (vector unsigned long long)(__b), \
18454 (vector unsigned long long)(__c), (__imm)))
18455#endif /* __SIZEOF_INT128__ */
18456#endif /* __VSX__ */
18457
18458/* vec_genpcvm */
18459
18460#ifdef __VSX__
18461#define vec_genpcvm(__a, __imm) \
18462 _Generic( \
18463 (__a), vector unsigned char \
18464 : __builtin_vsx_xxgenpcvbm((vector unsigned char)(__a), (int)(__imm)), \
18465 vector unsigned short \
18466 : __builtin_vsx_xxgenpcvhm((vector unsigned short)(__a), (int)(__imm)), \
18467 vector unsigned int \
18468 : __builtin_vsx_xxgenpcvwm((vector unsigned int)(__a), (int)(__imm)), \
18469 vector unsigned long long \
18470 : __builtin_vsx_xxgenpcvdm((vector unsigned long long)(__a), \
18471 (int)(__imm)))
18472#endif /* __VSX__ */
18473
18474/* vec_clr_first */
18475
18476static __inline__ vector signed char __ATTRS_o_ai
18477vec_clr_first(vector signed char __a, unsigned int __n) {
18478#ifdef __LITTLE_ENDIAN__
18479 return (vector signed char)__builtin_altivec_vclrrb((vector unsigned char)__a,
18480 __n);
18481#else
18482 return (vector signed char)__builtin_altivec_vclrlb((vector unsigned char)__a,
18483 __n);
18484#endif
18485}
18486
18487static __inline__ vector unsigned char __ATTRS_o_ai
18488vec_clr_first(vector unsigned char __a, unsigned int __n) {
18489#ifdef __LITTLE_ENDIAN__
18490 return (vector unsigned char)__builtin_altivec_vclrrb(
18491 (vector unsigned char)__a, __n);
18492#else
18493 return (vector unsigned char)__builtin_altivec_vclrlb(
18494 (vector unsigned char)__a, __n);
18495#endif
18496}
18497
18498/* vec_clr_last */
18499
18500static __inline__ vector signed char __ATTRS_o_ai
18501vec_clr_last(vector signed char __a, unsigned int __n) {
18502#ifdef __LITTLE_ENDIAN__
18503 return (vector signed char)__builtin_altivec_vclrlb((vector unsigned char)__a,
18504 __n);
18505#else
18506 return (vector signed char)__builtin_altivec_vclrrb((vector unsigned char)__a,
18507 __n);
18508#endif
18509}
18510
18511static __inline__ vector unsigned char __ATTRS_o_ai
18512vec_clr_last(vector unsigned char __a, unsigned int __n) {
18513#ifdef __LITTLE_ENDIAN__
18514 return (vector unsigned char)__builtin_altivec_vclrlb(
18515 (vector unsigned char)__a, __n);
18516#else
18517 return (vector unsigned char)__builtin_altivec_vclrrb(
18518 (vector unsigned char)__a, __n);
18519#endif
18520}
18521
18522/* vec_cntlzm */
18523
18524static __inline__ vector unsigned long long __ATTRS_o_ai
18525vec_cntlzm(vector unsigned long long __a, vector unsigned long long __b) {
18526 return __builtin_altivec_vclzdm(__a, __b);
18527}
18528
18529/* vec_cnttzm */
18530
18531static __inline__ vector unsigned long long __ATTRS_o_ai
18532vec_cnttzm(vector unsigned long long __a, vector unsigned long long __b) {
18533 return __builtin_altivec_vctzdm(__a, __b);
18534}
18535
18536/* vec_mod */
18537
18538static __inline__ vector signed int __ATTRS_o_ai
18539vec_mod(vector signed int __a, vector signed int __b) {
18540 return __a % __b;
18541}
18542
18543static __inline__ vector unsigned int __ATTRS_o_ai
18544vec_mod(vector unsigned int __a, vector unsigned int __b) {
18545 return __a % __b;
18546}
18547
18548static __inline__ vector signed long long __ATTRS_o_ai
18549vec_mod(vector signed long long __a, vector signed long long __b) {
18550 return __a % __b;
18551}
18552
18553static __inline__ vector unsigned long long __ATTRS_o_ai
18554vec_mod(vector unsigned long long __a, vector unsigned long long __b) {
18555 return __a % __b;
18556}
18557
18558#ifdef __SIZEOF_INT128__
18559static __inline__ vector signed __int128 __ATTRS_o_ai
18560vec_mod(vector signed __int128 __a, vector signed __int128 __b) {
18561 return __a % __b;
18562}
18563
18564static __inline__ vector unsigned __int128 __ATTRS_o_ai
18565vec_mod(vector unsigned __int128 __a, vector unsigned __int128 __b) {
18566 return __a % __b;
18567}
18568#endif
18569
18570/* vec_sldb */
18571#define vec_sldb(__a, __b, __c) \
18572 _Generic( \
18573 (__a), vector unsigned char \
18574 : (vector unsigned char)__builtin_altivec_vsldbi( \
18575 (vector unsigned char)__a, (vector unsigned char)__b, \
18576 (__c & 0x7)), \
18577 vector signed char \
18578 : (vector signed char)__builtin_altivec_vsldbi( \
18579 (vector unsigned char)__a, (vector unsigned char)__b, \
18580 (__c & 0x7)), \
18581 vector unsigned short \
18582 : (vector unsigned short)__builtin_altivec_vsldbi( \
18583 (vector unsigned char)__a, (vector unsigned char)__b, \
18584 (__c & 0x7)), \
18585 vector signed short \
18586 : (vector signed short)__builtin_altivec_vsldbi( \
18587 (vector unsigned char)__a, (vector unsigned char)__b, \
18588 (__c & 0x7)), \
18589 vector unsigned int \
18590 : (vector unsigned int)__builtin_altivec_vsldbi( \
18591 (vector unsigned char)__a, (vector unsigned char)__b, \
18592 (__c & 0x7)), \
18593 vector signed int \
18594 : (vector signed int)__builtin_altivec_vsldbi((vector unsigned char)__a, \
18595 (vector unsigned char)__b, \
18596 (__c & 0x7)), \
18597 vector unsigned long long \
18598 : (vector unsigned long long)__builtin_altivec_vsldbi( \
18599 (vector unsigned char)__a, (vector unsigned char)__b, \
18600 (__c & 0x7)), \
18601 vector signed long long \
18602 : (vector signed long long)__builtin_altivec_vsldbi( \
18603 (vector unsigned char)__a, (vector unsigned char)__b, (__c & 0x7)))
18604
18605/* vec_srdb */
18606#define vec_srdb(__a, __b, __c) \
18607 _Generic( \
18608 (__a), vector unsigned char \
18609 : (vector unsigned char)__builtin_altivec_vsrdbi( \
18610 (vector unsigned char)__a, (vector unsigned char)__b, \
18611 (__c & 0x7)), \
18612 vector signed char \
18613 : (vector signed char)__builtin_altivec_vsrdbi( \
18614 (vector unsigned char)__a, (vector unsigned char)__b, \
18615 (__c & 0x7)), \
18616 vector unsigned short \
18617 : (vector unsigned short)__builtin_altivec_vsrdbi( \
18618 (vector unsigned char)__a, (vector unsigned char)__b, \
18619 (__c & 0x7)), \
18620 vector signed short \
18621 : (vector signed short)__builtin_altivec_vsrdbi( \
18622 (vector unsigned char)__a, (vector unsigned char)__b, \
18623 (__c & 0x7)), \
18624 vector unsigned int \
18625 : (vector unsigned int)__builtin_altivec_vsrdbi( \
18626 (vector unsigned char)__a, (vector unsigned char)__b, \
18627 (__c & 0x7)), \
18628 vector signed int \
18629 : (vector signed int)__builtin_altivec_vsrdbi((vector unsigned char)__a, \
18630 (vector unsigned char)__b, \
18631 (__c & 0x7)), \
18632 vector unsigned long long \
18633 : (vector unsigned long long)__builtin_altivec_vsrdbi( \
18634 (vector unsigned char)__a, (vector unsigned char)__b, \
18635 (__c & 0x7)), \
18636 vector signed long long \
18637 : (vector signed long long)__builtin_altivec_vsrdbi( \
18638 (vector unsigned char)__a, (vector unsigned char)__b, (__c & 0x7)))
18639
18640/* vec_insertl */
18641
18642static __inline__ vector unsigned char __ATTRS_o_ai
18643vec_insertl(unsigned char __a, vector unsigned char __b, unsigned int __c) {
18644#ifdef __LITTLE_ENDIAN__
18645 return __builtin_altivec_vinsbrx(__b, __c, __a);
18646#else
18647 return __builtin_altivec_vinsblx(__b, __c, __a);
18648#endif
18649}
18650
18651static __inline__ vector unsigned short __ATTRS_o_ai
18652vec_insertl(unsigned short __a, vector unsigned short __b, unsigned int __c) {
18653#ifdef __LITTLE_ENDIAN__
18654 return __builtin_altivec_vinshrx(__b, __c, __a);
18655#else
18656 return __builtin_altivec_vinshlx(__b, __c, __a);
18657#endif
18658}
18659
18660static __inline__ vector unsigned int __ATTRS_o_ai
18661vec_insertl(unsigned int __a, vector unsigned int __b, unsigned int __c) {
18662#ifdef __LITTLE_ENDIAN__
18663 return __builtin_altivec_vinswrx(__b, __c, __a);
18664#else
18665 return __builtin_altivec_vinswlx(__b, __c, __a);
18666#endif
18667}
18668
18669static __inline__ vector unsigned long long __ATTRS_o_ai
18670vec_insertl(unsigned long long __a, vector unsigned long long __b,
18671 unsigned int __c) {
18672#ifdef __LITTLE_ENDIAN__
18673 return __builtin_altivec_vinsdrx(__b, __c, __a);
18674#else
18675 return __builtin_altivec_vinsdlx(__b, __c, __a);
18676#endif
18677}
18678
18679static __inline__ vector unsigned char __ATTRS_o_ai
18680vec_insertl(vector unsigned char __a, vector unsigned char __b,
18681 unsigned int __c) {
18682#ifdef __LITTLE_ENDIAN__
18683 return __builtin_altivec_vinsbvrx(__b, __c, __a);
18684#else
18685 return __builtin_altivec_vinsbvlx(__b, __c, __a);
18686#endif
18687}
18688
18689static __inline__ vector unsigned short __ATTRS_o_ai
18690vec_insertl(vector unsigned short __a, vector unsigned short __b,
18691 unsigned int __c) {
18692#ifdef __LITTLE_ENDIAN__
18693 return __builtin_altivec_vinshvrx(__b, __c, __a);
18694#else
18695 return __builtin_altivec_vinshvlx(__b, __c, __a);
18696#endif
18697}
18698
18699static __inline__ vector unsigned int __ATTRS_o_ai
18700vec_insertl(vector unsigned int __a, vector unsigned int __b,
18701 unsigned int __c) {
18702#ifdef __LITTLE_ENDIAN__
18703 return __builtin_altivec_vinswvrx(__b, __c, __a);
18704#else
18705 return __builtin_altivec_vinswvlx(__b, __c, __a);
18706#endif
18707}
18708
18709/* vec_inserth */
18710
18711static __inline__ vector unsigned char __ATTRS_o_ai
18712vec_inserth(unsigned char __a, vector unsigned char __b, unsigned int __c) {
18713#ifdef __LITTLE_ENDIAN__
18714 return __builtin_altivec_vinsblx(__b, __c, __a);
18715#else
18716 return __builtin_altivec_vinsbrx(__b, __c, __a);
18717#endif
18718}
18719
18720static __inline__ vector unsigned short __ATTRS_o_ai
18721vec_inserth(unsigned short __a, vector unsigned short __b, unsigned int __c) {
18722#ifdef __LITTLE_ENDIAN__
18723 return __builtin_altivec_vinshlx(__b, __c, __a);
18724#else
18725 return __builtin_altivec_vinshrx(__b, __c, __a);
18726#endif
18727}
18728
18729static __inline__ vector unsigned int __ATTRS_o_ai
18730vec_inserth(unsigned int __a, vector unsigned int __b, unsigned int __c) {
18731#ifdef __LITTLE_ENDIAN__
18732 return __builtin_altivec_vinswlx(__b, __c, __a);
18733#else
18734 return __builtin_altivec_vinswrx(__b, __c, __a);
18735#endif
18736}
18737
18738static __inline__ vector unsigned long long __ATTRS_o_ai
18739vec_inserth(unsigned long long __a, vector unsigned long long __b,
18740 unsigned int __c) {
18741#ifdef __LITTLE_ENDIAN__
18742 return __builtin_altivec_vinsdlx(__b, __c, __a);
18743#else
18744 return __builtin_altivec_vinsdrx(__b, __c, __a);
18745#endif
18746}
18747
18748static __inline__ vector unsigned char __ATTRS_o_ai
18749vec_inserth(vector unsigned char __a, vector unsigned char __b,
18750 unsigned int __c) {
18751#ifdef __LITTLE_ENDIAN__
18752 return __builtin_altivec_vinsbvlx(__b, __c, __a);
18753#else
18754 return __builtin_altivec_vinsbvrx(__b, __c, __a);
18755#endif
18756}
18757
18758static __inline__ vector unsigned short __ATTRS_o_ai
18759vec_inserth(vector unsigned short __a, vector unsigned short __b,
18760 unsigned int __c) {
18761#ifdef __LITTLE_ENDIAN__
18762 return __builtin_altivec_vinshvlx(__b, __c, __a);
18763#else
18764 return __builtin_altivec_vinshvrx(__b, __c, __a);
18765#endif
18766}
18767
18768static __inline__ vector unsigned int __ATTRS_o_ai
18769vec_inserth(vector unsigned int __a, vector unsigned int __b,
18770 unsigned int __c) {
18771#ifdef __LITTLE_ENDIAN__
18772 return __builtin_altivec_vinswvlx(__b, __c, __a);
18773#else
18774 return __builtin_altivec_vinswvrx(__b, __c, __a);
18775#endif
18776}
18777
18778/* vec_extractl */
18779
18780static __inline__ vector unsigned long long __ATTRS_o_ai vec_extractl(
18781 vector unsigned char __a, vector unsigned char __b, unsigned int __c) {
18782#ifdef __LITTLE_ENDIAN__
18783 return __builtin_altivec_vextdubvrx(__a, __b, __c);
18784#else
18785 vector unsigned long long __ret = __builtin_altivec_vextdubvlx(__a, __b, __c);
18786 return vec_sld(__ret, __ret, 8);
18787#endif
18788}
18789
18790static __inline__ vector unsigned long long __ATTRS_o_ai vec_extractl(
18791 vector unsigned short __a, vector unsigned short __b, unsigned int __c) {
18792#ifdef __LITTLE_ENDIAN__
18793 return __builtin_altivec_vextduhvrx(__a, __b, __c);
18794#else
18795 vector unsigned long long __ret = __builtin_altivec_vextduhvlx(__a, __b, __c);
18796 return vec_sld(__ret, __ret, 8);
18797#endif
18798}
18799
18800static __inline__ vector unsigned long long __ATTRS_o_ai vec_extractl(
18801 vector unsigned int __a, vector unsigned int __b, unsigned int __c) {
18802#ifdef __LITTLE_ENDIAN__
18803 return __builtin_altivec_vextduwvrx(__a, __b, __c);
18804#else
18805 vector unsigned long long __ret = __builtin_altivec_vextduwvlx(__a, __b, __c);
18806 return vec_sld(__ret, __ret, 8);
18807#endif
18808}
18809
18810static __inline__ vector unsigned long long __ATTRS_o_ai
18811vec_extractl(vector unsigned long long __a, vector unsigned long long __b,
18812 unsigned int __c) {
18813#ifdef __LITTLE_ENDIAN__
18814 return __builtin_altivec_vextddvrx(__a, __b, __c);
18815#else
18816 vector unsigned long long __ret = __builtin_altivec_vextddvlx(__a, __b, __c);
18817 return vec_sld(__ret, __ret, 8);
18818#endif
18819}
18820
18821/* vec_extracth */
18822
18823static __inline__ vector unsigned long long __ATTRS_o_ai vec_extracth(
18824 vector unsigned char __a, vector unsigned char __b, unsigned int __c) {
18825#ifdef __LITTLE_ENDIAN__
18826 return __builtin_altivec_vextdubvlx(__a, __b, __c);
18827#else
18828 vector unsigned long long __ret = __builtin_altivec_vextdubvrx(__a, __b, __c);
18829 return vec_sld(__ret, __ret, 8);
18830#endif
18831}
18832
18833static __inline__ vector unsigned long long __ATTRS_o_ai vec_extracth(
18834 vector unsigned short __a, vector unsigned short __b, unsigned int __c) {
18835#ifdef __LITTLE_ENDIAN__
18836 return __builtin_altivec_vextduhvlx(__a, __b, __c);
18837#else
18838 vector unsigned long long __ret = __builtin_altivec_vextduhvrx(__a, __b, __c);
18839 return vec_sld(__ret, __ret, 8);
18840#endif
18841}
18842
18843static __inline__ vector unsigned long long __ATTRS_o_ai vec_extracth(
18844 vector unsigned int __a, vector unsigned int __b, unsigned int __c) {
18845#ifdef __LITTLE_ENDIAN__
18846 return __builtin_altivec_vextduwvlx(__a, __b, __c);
18847#else
18848 vector unsigned long long __ret = __builtin_altivec_vextduwvrx(__a, __b, __c);
18849 return vec_sld(__ret, __ret, 8);
18850#endif
18851}
18852
18853static __inline__ vector unsigned long long __ATTRS_o_ai
18854vec_extracth(vector unsigned long long __a, vector unsigned long long __b,
18855 unsigned int __c) {
18856#ifdef __LITTLE_ENDIAN__
18857 return __builtin_altivec_vextddvlx(__a, __b, __c);
18858#else
18859 vector unsigned long long __ret = __builtin_altivec_vextddvrx(__a, __b, __c);
18860 return vec_sld(__ret, __ret, 8);
18861#endif
18862}
18863
18864#ifdef __VSX__
18865
18866/* vec_permx */
18867#define vec_permx(__a, __b, __c, __d) \
18868 _Generic( \
18869 (__a), vector unsigned char \
18870 : (vector unsigned char)__builtin_vsx_xxpermx( \
18871 (vector unsigned char)__a, (vector unsigned char)__b, __c, __d), \
18872 vector signed char \
18873 : (vector signed char)__builtin_vsx_xxpermx( \
18874 (vector unsigned char)__a, (vector unsigned char)__b, __c, __d), \
18875 vector unsigned short \
18876 : (vector unsigned short)__builtin_vsx_xxpermx( \
18877 (vector unsigned char)__a, (vector unsigned char)__b, __c, __d), \
18878 vector signed short \
18879 : (vector signed short)__builtin_vsx_xxpermx( \
18880 (vector unsigned char)__a, (vector unsigned char)__b, __c, __d), \
18881 vector unsigned int \
18882 : (vector unsigned int)__builtin_vsx_xxpermx( \
18883 (vector unsigned char)__a, (vector unsigned char)__b, __c, __d), \
18884 vector signed int \
18885 : (vector signed int)__builtin_vsx_xxpermx( \
18886 (vector unsigned char)__a, (vector unsigned char)__b, __c, __d), \
18887 vector unsigned long long \
18888 : (vector unsigned long long)__builtin_vsx_xxpermx( \
18889 (vector unsigned char)__a, (vector unsigned char)__b, __c, __d), \
18890 vector signed long long \
18891 : (vector signed long long)__builtin_vsx_xxpermx( \
18892 (vector unsigned char)__a, (vector unsigned char)__b, __c, __d), \
18893 vector float \
18894 : (vector float)__builtin_vsx_xxpermx( \
18895 (vector unsigned char)__a, (vector unsigned char)__b, __c, __d), \
18896 vector double \
18897 : (vector double)__builtin_vsx_xxpermx( \
18898 (vector unsigned char)__a, (vector unsigned char)__b, __c, __d))
18899
18900/* vec_blendv */
18901
18902static __inline__ vector signed char __ATTRS_o_ai
18903vec_blendv(vector signed char __a, vector signed char __b,
18904 vector unsigned char __c) {
18905 return (vector signed char)__builtin_vsx_xxblendvb(
18906 (vector unsigned char)__a, (vector unsigned char)__b, __c);
18907}
18908
18909static __inline__ vector unsigned char __ATTRS_o_ai
18910vec_blendv(vector unsigned char __a, vector unsigned char __b,
18911 vector unsigned char __c) {
18912 return __builtin_vsx_xxblendvb(__a, __b, __c);
18913}
18914
18915static __inline__ vector signed short __ATTRS_o_ai
18916vec_blendv(vector signed short __a, vector signed short __b,
18917 vector unsigned short __c) {
18918 return (vector signed short)__builtin_vsx_xxblendvh(
18919 (vector unsigned short)__a, (vector unsigned short)__b, __c);
18920}
18921
18922static __inline__ vector unsigned short __ATTRS_o_ai
18923vec_blendv(vector unsigned short __a, vector unsigned short __b,
18924 vector unsigned short __c) {
18925 return __builtin_vsx_xxblendvh(__a, __b, __c);
18926}
18927
18928static __inline__ vector signed int __ATTRS_o_ai
18929vec_blendv(vector signed int __a, vector signed int __b,
18930 vector unsigned int __c) {
18931 return (vector signed int)__builtin_vsx_xxblendvw(
18932 (vector unsigned int)__a, (vector unsigned int)__b, __c);
18933}
18934
18935static __inline__ vector unsigned int __ATTRS_o_ai
18936vec_blendv(vector unsigned int __a, vector unsigned int __b,
18937 vector unsigned int __c) {
18938 return __builtin_vsx_xxblendvw(__a, __b, __c);
18939}
18940
18941static __inline__ vector signed long long __ATTRS_o_ai
18942vec_blendv(vector signed long long __a, vector signed long long __b,
18943 vector unsigned long long __c) {
18944 return (vector signed long long)__builtin_vsx_xxblendvd(
18945 (vector unsigned long long)__a, (vector unsigned long long)__b, __c);
18946}
18947
18948static __inline__ vector unsigned long long __ATTRS_o_ai
18949vec_blendv(vector unsigned long long __a, vector unsigned long long __b,
18950 vector unsigned long long __c) {
18951 return (vector unsigned long long)__builtin_vsx_xxblendvd(__a, __b, __c);
18952}
18953
18954static __inline__ vector float __ATTRS_o_ai
18955vec_blendv(vector float __a, vector float __b, vector unsigned int __c) {
18956 return (vector float)__builtin_vsx_xxblendvw((vector unsigned int)__a,
18957 (vector unsigned int)__b, __c);
18958}
18959
18960static __inline__ vector double __ATTRS_o_ai
18961vec_blendv(vector double __a, vector double __b,
18962 vector unsigned long long __c) {
18963 return (vector double)__builtin_vsx_xxblendvd(
18964 (vector unsigned long long)__a, (vector unsigned long long)__b, __c);
18965}
18966
18967#define vec_replace_unaligned(__a, __b, __c) \
18968 _Generic((__a), vector signed int \
18969 : __builtin_altivec_vinsw((vector unsigned char)__a, \
18970 (unsigned int)__b, __c), \
18971 vector unsigned int \
18972 : __builtin_altivec_vinsw((vector unsigned char)__a, \
18973 (unsigned int)__b, __c), \
18974 vector unsigned long long \
18975 : __builtin_altivec_vinsd((vector unsigned char)__a, \
18976 (unsigned long long)__b, __c), \
18977 vector signed long long \
18978 : __builtin_altivec_vinsd((vector unsigned char)__a, \
18979 (unsigned long long)__b, __c), \
18980 vector float \
18981 : __builtin_altivec_vinsw((vector unsigned char)__a, \
18982 (unsigned int)__b, __c), \
18983 vector double \
18984 : __builtin_altivec_vinsd((vector unsigned char)__a, \
18985 (unsigned long long)__b, __c))
18986
18987#define vec_replace_elt(__a, __b, __c) \
18988 _Generic((__a), vector signed int \
18989 : (vector signed int)__builtin_altivec_vinsw_elt( \
18990 (vector unsigned char)__a, (unsigned int)__b, __c), \
18991 vector unsigned int \
18992 : (vector unsigned int)__builtin_altivec_vinsw_elt( \
18993 (vector unsigned char)__a, (unsigned int)__b, __c), \
18994 vector unsigned long long \
18995 : (vector unsigned long long)__builtin_altivec_vinsd_elt( \
18996 (vector unsigned char)__a, (unsigned long long)__b, __c), \
18997 vector signed long long \
18998 : (vector signed long long)__builtin_altivec_vinsd_elt( \
18999 (vector unsigned char)__a, (unsigned long long)__b, __c), \
19000 vector float \
19001 : (vector float)__builtin_altivec_vinsw_elt( \
19002 (vector unsigned char)__a, (unsigned int)__b, __c), \
19003 vector double \
19004 : (vector double)__builtin_altivec_vinsd_elt( \
19005 (vector unsigned char)__a, (unsigned long long)__b, __c))
19006
19007/* vec_splati */
19008
19009#define vec_splati(__a) \
19010 _Generic((__a), signed int \
19011 : ((vector signed int)__a), unsigned int \
19012 : ((vector unsigned int)__a), float \
19013 : ((vector float)__a))
19014
19015/* vec_spatid */
19016
19017static __inline__ vector double __ATTRS_o_ai vec_splatid(const float __a) {
19018 return ((vector double)((double)__a));
19019}
19020
19021/* vec_splati_ins */
19022
19023static __inline__ vector signed int __ATTRS_o_ai vec_splati_ins(
19024 vector signed int __a, const unsigned int __b, const signed int __c) {
19025 const unsigned int __d = __b & 0x01;
19026#ifdef __LITTLE_ENDIAN__
19027 __a[1 - __d] = __c;
19028 __a[3 - __d] = __c;
19029#else
19030 __a[__d] = __c;
19031 __a[2 + __d] = __c;
19032#endif
19033 return __a;
19034}
19035
19036static __inline__ vector unsigned int __ATTRS_o_ai vec_splati_ins(
19037 vector unsigned int __a, const unsigned int __b, const unsigned int __c) {
19038 const unsigned int __d = __b & 0x01;
19039#ifdef __LITTLE_ENDIAN__
19040 __a[1 - __d] = __c;
19041 __a[3 - __d] = __c;
19042#else
19043 __a[__d] = __c;
19044 __a[2 + __d] = __c;
19045#endif
19046 return __a;
19047}
19048
19049static __inline__ vector float __ATTRS_o_ai
19050vec_splati_ins(vector float __a, const unsigned int __b, const float __c) {
19051 const unsigned int __d = __b & 0x01;
19052#ifdef __LITTLE_ENDIAN__
19053 __a[1 - __d] = __c;
19054 __a[3 - __d] = __c;
19055#else
19056 __a[__d] = __c;
19057 __a[2 + __d] = __c;
19058#endif
19059 return __a;
19060}
19061
19062/* vec_test_lsbb_all_ones */
19063
19064static __inline__ int __ATTRS_o_ai
19065vec_test_lsbb_all_ones(vector unsigned char __a) {
19066 return __builtin_vsx_xvtlsbb(__a, 1);
19067}
19068
19069/* vec_test_lsbb_all_zeros */
19070
19071static __inline__ int __ATTRS_o_ai
19072vec_test_lsbb_all_zeros(vector unsigned char __a) {
19073 return __builtin_vsx_xvtlsbb(__a, 0);
19074}
19075#endif /* __VSX__ */
19076
19077/* vec_stril */
19078
19079static __inline__ vector unsigned char __ATTRS_o_ai
19080vec_stril(vector unsigned char __a) {
19081#ifdef __LITTLE_ENDIAN__
19082 return (vector unsigned char)__builtin_altivec_vstribr(
19083 (vector unsigned char)__a);
19084#else
19085 return (vector unsigned char)__builtin_altivec_vstribl(
19086 (vector unsigned char)__a);
19087#endif
19088}
19089
19090static __inline__ vector signed char __ATTRS_o_ai
19091vec_stril(vector signed char __a) {
19092#ifdef __LITTLE_ENDIAN__
19093 return (vector signed char)__builtin_altivec_vstribr(
19094 (vector unsigned char)__a);
19095#else
19096 return (vector signed char)__builtin_altivec_vstribl(
19097 (vector unsigned char)__a);
19098#endif
19099}
19100
19101static __inline__ vector unsigned short __ATTRS_o_ai
19102vec_stril(vector unsigned short __a) {
19103#ifdef __LITTLE_ENDIAN__
19104 return (vector unsigned short)__builtin_altivec_vstrihr(
19105 (vector signed short)__a);
19106#else
19107 return (vector unsigned short)__builtin_altivec_vstrihl(
19108 (vector signed short)__a);
19109#endif
19110}
19111
19112static __inline__ vector signed short __ATTRS_o_ai
19113vec_stril(vector signed short __a) {
19114#ifdef __LITTLE_ENDIAN__
19115 return __builtin_altivec_vstrihr(__a);
19116#else
19117 return __builtin_altivec_vstrihl(__a);
19118#endif
19119}
19120
19121/* vec_stril_p */
19122
19123static __inline__ int __ATTRS_o_ai vec_stril_p(vector unsigned char __a) {
19124#ifdef __LITTLE_ENDIAN__
19125 return __builtin_altivec_vstribr_p(__CR6_EQ, (vector unsigned char)__a);
19126#else
19127 return __builtin_altivec_vstribl_p(__CR6_EQ, (vector unsigned char)__a);
19128#endif
19129}
19130
19131static __inline__ int __ATTRS_o_ai vec_stril_p(vector signed char __a) {
19132#ifdef __LITTLE_ENDIAN__
19133 return __builtin_altivec_vstribr_p(__CR6_EQ, (vector unsigned char)__a);
19134#else
19135 return __builtin_altivec_vstribl_p(__CR6_EQ, (vector unsigned char)__a);
19136#endif
19137}
19138
19139static __inline__ int __ATTRS_o_ai vec_stril_p(vector unsigned short __a) {
19140#ifdef __LITTLE_ENDIAN__
19141 return __builtin_altivec_vstrihr_p(__CR6_EQ, (vector signed short)__a);
19142#else
19143 return __builtin_altivec_vstrihl_p(__CR6_EQ, (vector signed short)__a);
19144#endif
19145}
19146
19147static __inline__ int __ATTRS_o_ai vec_stril_p(vector signed short __a) {
19148#ifdef __LITTLE_ENDIAN__
19149 return __builtin_altivec_vstrihr_p(__CR6_EQ, __a);
19150#else
19151 return __builtin_altivec_vstrihl_p(__CR6_EQ, __a);
19152#endif
19153}
19154
19155/* vec_strir */
19156
19157static __inline__ vector unsigned char __ATTRS_o_ai
19158vec_strir(vector unsigned char __a) {
19159#ifdef __LITTLE_ENDIAN__
19160 return (vector unsigned char)__builtin_altivec_vstribl(
19161 (vector unsigned char)__a);
19162#else
19163 return (vector unsigned char)__builtin_altivec_vstribr(
19164 (vector unsigned char)__a);
19165#endif
19166}
19167
19168static __inline__ vector signed char __ATTRS_o_ai
19169vec_strir(vector signed char __a) {
19170#ifdef __LITTLE_ENDIAN__
19171 return (vector signed char)__builtin_altivec_vstribl(
19172 (vector unsigned char)__a);
19173#else
19174 return (vector signed char)__builtin_altivec_vstribr(
19175 (vector unsigned char)__a);
19176#endif
19177}
19178
19179static __inline__ vector unsigned short __ATTRS_o_ai
19180vec_strir(vector unsigned short __a) {
19181#ifdef __LITTLE_ENDIAN__
19182 return (vector unsigned short)__builtin_altivec_vstrihl(
19183 (vector signed short)__a);
19184#else
19185 return (vector unsigned short)__builtin_altivec_vstrihr(
19186 (vector signed short)__a);
19187#endif
19188}
19189
19190static __inline__ vector signed short __ATTRS_o_ai
19191vec_strir(vector signed short __a) {
19192#ifdef __LITTLE_ENDIAN__
19193 return __builtin_altivec_vstrihl(__a);
19194#else
19195 return __builtin_altivec_vstrihr(__a);
19196#endif
19197}
19198
19199/* vec_strir_p */
19200
19201static __inline__ int __ATTRS_o_ai vec_strir_p(vector unsigned char __a) {
19202#ifdef __LITTLE_ENDIAN__
19203 return __builtin_altivec_vstribl_p(__CR6_EQ, (vector unsigned char)__a);
19204#else
19205 return __builtin_altivec_vstribr_p(__CR6_EQ, (vector unsigned char)__a);
19206#endif
19207}
19208
19209static __inline__ int __ATTRS_o_ai vec_strir_p(vector signed char __a) {
19210#ifdef __LITTLE_ENDIAN__
19211 return __builtin_altivec_vstribl_p(__CR6_EQ, (vector unsigned char)__a);
19212#else
19213 return __builtin_altivec_vstribr_p(__CR6_EQ, (vector unsigned char)__a);
19214#endif
19215}
19216
19217static __inline__ int __ATTRS_o_ai vec_strir_p(vector unsigned short __a) {
19218#ifdef __LITTLE_ENDIAN__
19219 return __builtin_altivec_vstrihl_p(__CR6_EQ, (vector signed short)__a);
19220#else
19221 return __builtin_altivec_vstrihr_p(__CR6_EQ, (vector signed short)__a);
19222#endif
19223}
19224
19225static __inline__ int __ATTRS_o_ai vec_strir_p(vector signed short __a) {
19226#ifdef __LITTLE_ENDIAN__
19227 return __builtin_altivec_vstrihl_p(__CR6_EQ, __a);
19228#else
19229 return __builtin_altivec_vstrihr_p(__CR6_EQ, __a);
19230#endif
19231}
19232
19233/* vs[l | r | ra] */
19234
19235#ifdef __SIZEOF_INT128__
19236static __inline__ vector unsigned __int128 __ATTRS_o_ai
19237vec_sl(vector unsigned __int128 __a, vector unsigned __int128 __b) {
19238 return __a << (__b % (vector unsigned __int128)(sizeof(unsigned __int128) *
19239 __CHAR_BIT__));
19240}
19241
19242static __inline__ vector signed __int128 __ATTRS_o_ai
19243vec_sl(vector signed __int128 __a, vector unsigned __int128 __b) {
19244 return __a << (__b % (vector unsigned __int128)(sizeof(unsigned __int128) *
19245 __CHAR_BIT__));
19246}
19247
19248static __inline__ vector unsigned __int128 __ATTRS_o_ai
19249vec_sr(vector unsigned __int128 __a, vector unsigned __int128 __b) {
19250 return __a >> (__b % (vector unsigned __int128)(sizeof(unsigned __int128) *
19251 __CHAR_BIT__));
19252}
19253
19254static __inline__ vector signed __int128 __ATTRS_o_ai
19255vec_sr(vector signed __int128 __a, vector unsigned __int128 __b) {
19256 return (
19257 vector signed __int128)(((vector unsigned __int128)__a) >>
19258 (__b %
19259 (vector unsigned __int128)(sizeof(
19260 unsigned __int128) *
19261 __CHAR_BIT__)));
19262}
19263
19264static __inline__ vector unsigned __int128 __ATTRS_o_ai
19265vec_sra(vector unsigned __int128 __a, vector unsigned __int128 __b) {
19266 return (
19267 vector unsigned __int128)(((vector signed __int128)__a) >>
19268 (__b %
19269 (vector unsigned __int128)(sizeof(
19270 unsigned __int128) *
19271 __CHAR_BIT__)));
19272}
19273
19274static __inline__ vector signed __int128 __ATTRS_o_ai
19275vec_sra(vector signed __int128 __a, vector unsigned __int128 __b) {
19276 return __a >> (__b % (vector unsigned __int128)(sizeof(unsigned __int128) *
19277 __CHAR_BIT__));
19278}
19279
19280#endif /* __SIZEOF_INT128__ */
19281#endif /* __POWER10_VECTOR__ */
19282
19283#ifdef __POWER8_VECTOR__
19284#define __bcdadd(__a, __b, __ps) __builtin_ppc_bcdadd((__a), (__b), (__ps))
19285#define __bcdsub(__a, __b, __ps) __builtin_ppc_bcdsub((__a), (__b), (__ps))
19286
19287static __inline__ long __bcdadd_ofl(vector unsigned char __a,
19288 vector unsigned char __b) {
19289 return __builtin_ppc_bcdadd_p(__CR6_SO, __a, __b);
19290}
19291
19292static __inline__ long __bcdsub_ofl(vector unsigned char __a,
19293 vector unsigned char __b) {
19294 return __builtin_ppc_bcdsub_p(__CR6_SO, __a, __b);
19295}
19296
19297static __inline__ long __bcd_invalid(vector unsigned char __a) {
19298 return __builtin_ppc_bcdsub_p(__CR6_SO, __a, __a);
19299}
19300
19301static __inline__ long __bcdcmpeq(vector unsigned char __a,
19302 vector unsigned char __b) {
19303 return __builtin_ppc_bcdsub_p(__CR6_EQ, __a, __b);
19304}
19305
19306static __inline__ long __bcdcmplt(vector unsigned char __a,
19307 vector unsigned char __b) {
19308 return __builtin_ppc_bcdsub_p(__CR6_LT, __a, __b);
19309}
19310
19311static __inline__ long __bcdcmpgt(vector unsigned char __a,
19312 vector unsigned char __b) {
19313 return __builtin_ppc_bcdsub_p(__CR6_GT, __a, __b);
19314}
19315
19316static __inline__ long __bcdcmple(vector unsigned char __a,
19317 vector unsigned char __b) {
19318 return __builtin_ppc_bcdsub_p(__CR6_GT_REV, __a, __b);
19319}
19320
19321static __inline__ long __bcdcmpge(vector unsigned char __a,
19322 vector unsigned char __b) {
19323 return __builtin_ppc_bcdsub_p(__CR6_LT_REV, __a, __b);
19324}
19325
19326#endif // __POWER8_VECTOR__
19327
19328#undef __ATTRS_o_ai
19329
19330#endif /* __ALTIVEC_H */
__device__ double
__device__ float
static __inline__ vector int __ATTRS_o_ai vec_vsubsws(vector int __a, vector int __b)
Definition altivec.h:12296
static __inline__ vector int __ATTRS_o_ai vec_lvewx(long __a, const int *__b)
Definition altivec.h:4284
static __inline__ vector signed int __ATTRS_o_ai vec_sube(vector signed int __a, vector signed int __b, vector signed int __c)
Definition altivec.h:12459
static __inline__ vector unsigned char __ATTRS_o_ai vec_sr(vector unsigned char __a, vector unsigned char __b)
Definition altivec.h:10381
static __inline__ vector unsigned short __ATTRS_o_ai vec_vadduhs(vector unsigned short __a, vector unsigned short __b)
Definition altivec.h:769
static __inline__ vector bool char __ATTRS_o_ai vec_cmpeq(vector signed char __a, vector signed char __b)
Definition altivec.h:1708
#define __CR6_GT_REV
Definition altivec.h:23
static __inline__ void __ATTRS_o_ai vec_stvx(vector signed char __a, long __b, vector signed char *__c)
Definition altivec.h:11303
static __inline__ vector short __ATTRS_o_ai vec_vmaxsh(vector short __a, vector short __b)
Definition altivec.h:4999
static __inline__ signed char __ATTRS_o_ai vec_extract(vector signed char __a, signed int __b)
Definition altivec.h:13529
static __inline__ vector signed char __ATTRS_o_ai vec_sra(vector signed char __a, vector unsigned char __b)
Definition altivec.h:10515
static __inline__ vector signed char __ATTRS_o_ai vec_lvx(long __a, const vector signed char *__b)
Definition altivec.h:4138
static __inline__ vector int __ATTRS_o_ai vec_vmrghw(vector int __a, vector int __b)
Definition altivec.h:5314
static __inline__ vector short __ATTRS_o_ai vec_vsubshs(vector short __a, vector short __b)
Definition altivec.h:12262
static __inline__ vector signed char __ATTRS_o_ai vec_sro(vector signed char __a, vector signed char __b)
Definition altivec.h:10967
static __inline__ vector signed char __ATTRS_o_ai vec_lvrx(int __a, const signed char *__b)
Definition altivec.h:13959
static __inline__ void __ATTRS_o_ai vec_stvehx(vector short __a, long __b, short *__c)
Definition altivec.h:11533
#define __CR6_GT
Definition altivec.h:22
static __inline__ vector signed char __ATTRS_o_ai vec_abss(vector signed char __a)
Definition altivec.h:160
static __inline__ vector signed char __ATTRS_o_ai vec_vsubsbs(vector signed char __a, vector signed char __b)
Definition altivec.h:12229
static __inline__ vector unsigned int __ATTRS_o_ai vec_vmaxuw(vector unsigned int __a, vector unsigned int __b)
Definition altivec.h:5051
static __inline__ vector float __ATTRS_o_ai vec_ceil(vector float __a)
Definition altivec.h:1659
static __inline__ vector signed char __ATTRS_o_ai vec_vslb(vector signed char __a, vector unsigned char __b)
Definition altivec.h:8966
static __inline__ vector short __ATTRS_o_ai vec_vsplth(vector short __a, unsigned char __b)
Definition altivec.h:10226
static __inline__ vector short __ATTRS_o_ai vec_vmladduhm(vector short __a, vector short __b, vector short __c)
Definition altivec.h:6009
static __inline__ vector int __ATTRS_o_ai vec_vupkhsh(vector short __a)
Definition altivec.h:12719
static __inline__ int __ATTRS_o_ai vec_any_ngt(vector float __a, vector float __b)
Definition altivec.h:17230
static __inline__ int __ATTRS_o_ai vec_any_ne(vector signed char __a, vector signed char __b)
Definition altivec.h:17004
static __inline__ vector signed char __ATTRS_o_ai vec_lde(long __a, const signed char *__b)
Definition altivec.h:4227
static __inline__ void __ATTRS_o_ai vec_stvlxl(vector signed char __a, int __b, signed char *__c)
Definition altivec.h:14286
#define vec_xst_be
Definition altivec.h:18190
static __ATTRS_o_ai vector signed char vec_xl(ptrdiff_t __offset, const signed char *__ptr)
Definition altivec.h:17693
static __inline__ vector int __ATTRS_o_ai vec_vsraw(vector int __a, vector unsigned int __b)
Definition altivec.h:10594
static __inline__ vector bool char __ATTRS_o_ai vec_cmpne(vector bool char __a, vector bool char __b)
Definition altivec.h:2032
static __inline__ int __ATTRS_o_ai vec_any_nge(vector float __a, vector float __b)
Definition altivec.h:17212
static __inline__ vector signed char __ATTRS_o_ai vec_sldw(vector signed char __a, vector signed char __b, unsigned const int __c)
Definition altivec.h:9289
vector signed char unaligned_vec_schar __attribute__((aligned(1)))
Definition altivec.h:17685
static __inline__ vector short __ATTRS_o_ai vec_vslh(vector short __a, vector unsigned short __b)
Definition altivec.h:8980
static __inline__ vector float vector float vector float __c
Definition altivec.h:4788
static __inline__ vector short __ATTRS_o_ai vec_vaddshs(vector short __a, vector short __b)
Definition altivec.h:751
static __inline__ vector int __ATTRS_o_ai vec_msum(vector signed char __a, vector unsigned char __b, vector int __c)
Definition altivec.h:6047
static __inline__ vector short __ATTRS_o_ai vec_mule(vector signed char __a, vector signed char __b)
Definition altivec.h:6251
static __inline__ int __ATTRS_o_ai vec_any_le(vector signed char __a, vector signed char __b)
Definition altivec.h:16609
static __inline__ vector signed char __ATTRS_o_ai vec_vaddubm(vector signed char __a, vector signed char __b)
Definition altivec.h:476
static __inline__ vector short __ATTRS_o_ai vec_vspltish(signed char __a)
Definition altivec.h:10332
static __inline__ vector float vector float __b
Definition altivec.h:578
static __inline__ vector unsigned char __ATTRS_o_ai vec_lvsr(int __a, const signed char *__b)
Definition altivec.h:4627
static vector float __ATTRS_o_ai vec_recipdiv(vector float __a, vector float __b)
Definition altivec.h:18262
static __inline__ vector short __ATTRS_o_ai vec_vsubuhm(vector short __a, vector short __b)
Definition altivec.h:12020
static __inline__ vector signed char __ATTRS_o_ai vec_ld(long __a, const vector signed char *__b)
Definition altivec.h:4049
static __inline__ vector float __ATTRS_o_ai vec_round(vector float __a)
Definition altivec.h:8457
static __inline__ vector signed char __ATTRS_o_ai vec_vrlb(vector signed char __a, vector unsigned char __b)
Definition altivec.h:8422
static __inline__ vector signed int __ATTRS_o_ai vec_subc(vector signed int __a, vector signed int __b)
Definition altivec.h:12096
static __inline__ vector unsigned char __ATTRS_o_ai vec_vaddubs(vector unsigned char __a, vector unsigned char __b)
Definition altivec.h:735
static __inline__ vector signed char __ATTRS_o_ai vec_vpkuhum(vector signed short __a, vector signed short __b)
Definition altivec.h:7535
static __inline__ vector signed int __ATTRS_o_ai vec_addc(vector signed int __a, vector signed int __b)
Definition altivec.h:585
static __inline__ int __ATTRS_o_ai vec_all_le(vector signed char __a, vector signed char __b)
Definition altivec.h:15346
static __ATTRS_o_ai vector bool char vec_reve(vector bool char __a)
Definition altivec.h:17497
static __inline__ vector short __ATTRS_o_ai vec_vminsh(vector short __a, vector short __b)
Definition altivec.h:5903
static __inline__ vector signed char __ATTRS_o_ai vec_splats(signed char __a)
Definition altivec.h:14706
static __inline__ vector short __ATTRS_o_ai vec_vupkhsb(vector signed char __a)
Definition altivec.h:12700
#define __CR6_LT
Definition altivec.h:20
static __inline__ vector bool char __ATTRS_o_ai vec_revb(vector bool char __a)
Definition altivec.h:17567
static __inline__ int __ATTRS_o_ai vec_any_nan(vector float __a)
Definition altivec.h:16989
static __inline__ int __ATTRS_o_ai vec_all_eq(vector signed char __a, vector signed char __b)
Definition altivec.h:14771
static __inline__ vector signed char __ATTRS_o_ai vec_andc(vector signed char __a, vector signed char __b)
Definition altivec.h:1235
static __inline__ vector unsigned char __ATTRS_o_ai vec_lvsl(int __a, const signed char *__b)
Definition altivec.h:4506
static __inline__ void __ATTRS_o_ai vec_st(vector signed char __a, long __b, vector signed char *__c)
Definition altivec.h:11172
static __inline__ vector signed int __ATTRS_o_ai vec_sld(vector signed int, vector signed int, unsigned const int __c)
Definition altivec.h:9137
static __inline__ vector int __ATTRS_o_ai vec_vsrw(vector int __a, vector unsigned int __b)
Definition altivec.h:10502
static __inline__ vector short __ATTRS_o_ai vec_unpackl(vector signed char __a)
Definition altivec.h:12769
static __inline__ int __ATTRS_o_ai vec_all_ne(vector signed char __a, vector signed char __b)
Definition altivec.h:15724
static __inline__ vector int __ATTRS_o_ai vec_sum4s(vector signed char __a, vector int __b)
Definition altivec.h:12475
static __inline__ void __ATTRS_o_ai vec_mtvscr(vector signed char __a)
Definition altivec.h:6142
static __inline__ vector signed char __ATTRS_o_ai vec_vandc(vector signed char __a, vector signed char __b)
Definition altivec.h:1421
static __inline__ vector signed char __ATTRS_o_ai vec_mul(vector signed char __a, vector signed char __b)
Definition altivec.h:6193
static __inline__ void __ATTRS_o_ai vec_stvxl(vector signed char __a, int __b, vector signed char *__c)
Definition altivec.h:11723
static __inline__ vector signed int __ATTRS_o_ai vec_signed(vector float __a)
Definition altivec.h:3483
static __inline__ void __ATTRS_o_ai vec_stl(vector signed char __a, int __b, vector signed char *__c)
Definition altivec.h:11592
static __inline__ vector signed char __ATTRS_o_ai vec_and(vector signed char __a, vector signed char __b)
Definition altivec.h:882
static __inline__ vector signed char __ATTRS_o_ai vec_avg(vector signed char __a, vector signed char __b)
Definition altivec.h:1586
static __ATTRS_o_ai void vec_xst(vector signed char __vec, ptrdiff_t __offset, signed char *__ptr)
Definition altivec.h:17964
static __inline__ vector signed char __ATTRS_o_ai vec_splat_s8(signed char __a)
Definition altivec.h:10308
static __inline__ int __ATTRS_o_ai vec_all_nan(vector float __a)
Definition altivec.h:15708
static __inline__ vector signed char __ATTRS_o_ai vec_mergel(vector signed char __a, vector signed char __b)
Definition altivec.h:5349
#define __CR6_SO
Definition altivec.h:24
static __inline__ vector int __ATTRS_o_ai vec_vspltisw(signed char __a)
Definition altivec.h:10348
static __inline__ vector signed char __ATTRS_o_ai vec_subs(vector signed char __a, vector signed char __b)
Definition altivec.h:12137
static __inline__ vector int __ATTRS_o_ai vec_vmrglw(vector int __a, vector int __b)
Definition altivec.h:5577
static __inline__ vector signed char __ATTRS_o_ai vec_vxor(vector signed char __a, vector signed char __b)
Definition altivec.h:13363
static __inline__ vector short __ATTRS_o_ai vec_vmrglh(vector short __a, vector short __b)
Definition altivec.h:5541
static __inline__ int __ATTRS_o_ai vec_all_ngt(vector float __a, vector float __b)
Definition altivec.h:15950
static __inline__ vector float __ATTRS_o_ai vec_floor(vector float __a)
Definition altivec.h:4014
static __inline__ vector signed char __ATTRS_o_ai vec_lvlx(int __a, const signed char *__b)
Definition altivec.h:13747
static __inline__ vector short __ATTRS_o_ai vec_vrlh(vector short __a, vector unsigned short __b)
Definition altivec.h:8434
static __inline__ vector int __ATTRS_o_ai vec_vrlw(vector int __a, vector unsigned int __b)
Definition altivec.h:8445
#define __CR6_LT_REV
Definition altivec.h:21
static __inline__ int __ATTRS_o_ai vec_all_gt(vector signed char __a, vector signed char __b)
Definition altivec.h:15159
static __inline__ vector int __ATTRS_o_ai vec_splat_s32(signed char __a)
Definition altivec.h:10341
static __inline__ vector signed char __ATTRS_o_ai vec_vmrglb(vector signed char __a, vector signed char __b)
Definition altivec.h:5514
static __inline__ vector signed char __ATTRS_o_ai vec_adds(vector signed char __a, vector signed char __b)
Definition altivec.h:626
#define __ATTRS_o_ai
Definition altivec.h:46
static __inline__ vector unsigned short __ATTRS_o_ai vec_vsubuhs(vector unsigned short __a, vector unsigned short __b)
Definition altivec.h:12280
static __inline__ vector signed char __ATTRS_o_ai vec_promote(signed char __a, int __b)
Definition altivec.h:14636
static __inline__ vector unsigned short __ATTRS_o_ai vec_vmaxuh(vector unsigned short __a, vector unsigned short __b)
Definition altivec.h:5017
static __inline__ vector signed char __ATTRS_o_ai vec_perm(vector signed char __a, vector signed char __b, vector unsigned char __c)
Definition altivec.h:7950
static __inline__ vector unsigned char __ATTRS_o_ai vec_vminub(vector unsigned char __a, vector unsigned char __b)
Definition altivec.h:5887
static __inline__ vector signed char __ATTRS_o_ai vec_vsrab(vector signed char __a, vector unsigned char __b)
Definition altivec.h:10571
static __inline__ vector signed char __ATTRS_o_ai vec_vsububm(vector signed char __a, vector signed char __b)
Definition altivec.h:11987
static __inline__ vector signed short __ATTRS_o_ai vec_mladd(vector signed short, vector signed short, vector signed short)
static __inline__ void __ATTRS_o_ai vec_stvlx(vector signed char __a, int __b, signed char *__c)
Definition altivec.h:14170
static __inline__ vector signed char __ATTRS_o_ai vec_sel(vector signed char __a, vector signed char __b, vector unsigned char __c)
Definition altivec.h:8576
static __inline__ vector signed char __ATTRS_o_ai vec_lvxl(long __a, const vector signed char *__b)
Definition altivec.h:4390
static __inline__ vector signed char __ATTRS_o_ai vec_vmaxsb(vector signed char __a, vector signed char __b)
Definition altivec.h:4966
static __inline__ int __ATTRS_o_ai vec_any_numeric(vector float __a)
Definition altivec.h:17284
static __inline__ vector float __ATTRS_o_ai vec_float(vector signed int __a)
Definition altivec.h:3567
static __inline__ vector unsigned int __ATTRS_o_ai vec_splat_u32(signed char __a)
Definition altivec.h:10372
static __inline__ vector signed char __ATTRS_o_ai vec_mergeh(vector signed char __a, vector signed char __b)
Definition altivec.h:5079
static __inline__ vector int __ATTRS_o_ai vec_vupklsh(vector short __a)
Definition altivec.h:12858
#define __CR6_EQ_REV
Definition altivec.h:19
static __inline__ vector signed char __ATTRS_o_ai vec_lvebx(long __a, const signed char *__b)
Definition altivec.h:4261
static __inline__ vector signed char __ATTRS_o_ai vec_vsldoi(vector signed char __a, vector signed char __b, unsigned char __c)
Definition altivec.h:9362
static __inline__ vector signed char __ATTRS_o_ai vec_rl(vector signed char __a, vector unsigned char __b)
Definition altivec.h:8275
static __inline__ vector bool char __ATTRS_o_ai vec_cmplt(vector signed char __a, vector signed char __b)
Definition altivec.h:2435
static __inline__ vector unsigned int __ATTRS_o_ai vec_unsigned(vector float __a)
Definition altivec.h:3525
static __inline__ vector int __ATTRS_o_ai vec_vslw(vector int __a, vector unsigned int __b)
Definition altivec.h:8993
static __inline__ void __ATTRS_o_ai vec_ste(vector signed char __a, long __b, signed char *__c)
Definition altivec.h:11435
static __inline__ vector unsigned char __ATTRS_o_ai vec_vmaxub(vector unsigned char __a, vector unsigned char __b)
Definition altivec.h:4983
static __inline__ vector unsigned short __ATTRS_o_ai vec_vpkswus(vector int __a, vector int __b)
Definition altivec.h:7910
static __inline__ vector short __ATTRS_o_ai vec_vsrh(vector short __a, vector unsigned short __b)
Definition altivec.h:10489
static __inline__ vector signed char __ATTRS_o_ai vec_vmrghb(vector signed char __a, vector signed char __b)
Definition altivec.h:5251
static __inline__ vector float __ATTRS_o_ai vec_roundp(vector float __a)
Definition altivec.h:1674
static __inline__ vector signed char __ATTRS_o_ai vec_vnor(vector signed char __a, vector signed char __b)
Definition altivec.h:6780
static __inline__ vector signed char __ATTRS_o_ai vec_max(vector signed char __a, vector signed char __b)
Definition altivec.h:4826
static __inline__ int __ATTRS_o_ai vec_all_lt(vector signed char __a, vector signed char __b)
Definition altivec.h:15527
static __inline__ int __ATTRS_o_ai vec_any_ge(vector signed char __a, vector signed char __b)
Definition altivec.h:16229
static __inline__ void __ATTRS_o_ai vec_stvewx(vector int __a, long __b, int *__c)
Definition altivec.h:11565
static __inline__ vector signed int __ATTRS_o_ai vec_adde(vector signed int __a, vector signed int __b, vector signed int __c)
Definition altivec.h:383
static __inline__ vector int __ATTRS_o_ai vec_vspltw(vector int __a, unsigned char __b)
Definition altivec.h:10266
static __inline__ vector signed char __ATTRS_o_ai vec_slo(vector signed char __a, vector signed char __b)
Definition altivec.h:9872
static __inline__ int __ATTRS_o_ai vec_all_numeric(vector float __a)
Definition altivec.h:16005
static __inline__ vector signed char __ATTRS_o_ai vec_nor(vector signed char __a, vector signed char __b)
Definition altivec.h:6717
#define vec_xl_be
Definition altivec.h:17849
static __inline__ vector short __ATTRS_o_ai vec_vpkuwum(vector int __a, vector int __b)
Definition altivec.h:7583
static __inline__ vector bool char __ATTRS_o_ai vec_cmpge(vector signed char __a, vector signed char __b)
Definition altivec.h:2243
static __inline__ vector signed char __ATTRS_o_ai vec_lvlxl(int __a, const signed char *__b)
Definition altivec.h:13853
static __inline__ vector signed char __ATTRS_o_ai vec_pack(vector signed short __a, vector signed short __b)
Definition altivec.h:7377
static __inline__ vector signed char __ATTRS_o_ai vec_ldl(long __a, const vector signed char *__b)
Definition altivec.h:4301
static __inline__ vector unsigned char __ATTRS_o_ai vec_packsu(vector short __a, vector short __b)
Definition altivec.h:7832
static __inline__ vector short __ATTRS_o_ai vec_mulo(vector signed char __a, vector signed char __b)
Definition altivec.h:6397
static __inline__ int __ATTRS_o_ai vec_all_nge(vector float __a, vector float __b)
Definition altivec.h:15932
static __inline__ vector int __ATTRS_o_ai vec_vsubuwm(vector int __a, vector int __b)
Definition altivec.h:12054
static __inline__ vector signed char __ATTRS_o_ai vec_srl(vector signed char __a, vector unsigned char __b)
Definition altivec.h:10607
static vector float __ATTRS_o_ai vec_rsqrt(vector float __a)
Definition altivec.h:8543
static __inline__ vector float __ATTRS_o_ai vec_re(vector float __a)
Definition altivec.h:8251
static __inline__ vector signed char __ATTRS_o_ai vec_min(vector signed char __a, vector signed char __b)
Definition altivec.h:5730
static __inline__ vector signed char __ATTRS_o_ai vec_vand(vector signed char __a, vector signed char __b)
Definition altivec.h:1068
static __inline__ vector signed char __ATTRS_o_ai vec_splat(vector signed char __a, unsigned const int __b)
Definition altivec.h:10078
static __inline__ vector unsigned char __ATTRS_o_ai vec_vpkshus(vector short __a, vector short __b)
Definition altivec.h:7890
static __inline__ vector unsigned int __ATTRS_o_ai vec_vminuw(vector unsigned int __a, vector unsigned int __b)
Definition altivec.h:5955
static __inline__ vector signed char __ATTRS_o_ai vec_lvrxl(int __a, const signed char *__b)
Definition altivec.h:14065
static vector float __ATTRS_o_ai vec_neg(vector float __a)
Definition altivec.h:18204
static vector float __ATTRS_o_ai vec_nabs(vector float __a)
Definition altivec.h:18233
static __inline__ vector signed char __ATTRS_o_ai vec_or(vector signed char __a, vector signed char __b)
Definition altivec.h:6853
static __inline__ vector short __ATTRS_o_ai vec_unpackh(vector signed char __a)
Definition altivec.h:12630
static __inline__ vector short __ATTRS_o_ai vec_vmrghh(vector short __a, vector short __b)
Definition altivec.h:5278
static __inline__ vector signed char __ATTRS_o_ai vec_vsr(vector signed char __a, vector unsigned char __b)
Definition altivec.h:10794
static __inline__ vector unsigned char __ATTRS_o_ai vec_sl(vector unsigned char __a, vector unsigned char __b)
Definition altivec.h:8870
static __inline__ vector short __ATTRS_o_ai vec_vadduhm(vector short __a, vector short __b)
Definition altivec.h:509
static __inline__ vector short __ATTRS_o_ai vec_splat_s16(signed char __a)
Definition altivec.h:10325
static __inline__ vector signed char __ATTRS_o_ai vec_vminsb(vector signed char __a, vector signed char __b)
Definition altivec.h:5870
static __inline__ vector signed char __ATTRS_o_ai vec_add(vector signed char __a, vector signed char __b)
Definition altivec.h:200
static __inline__ vector signed char __ATTRS_o_ai vec_vperm(vector signed char __a, vector signed char __b, vector unsigned char __c)
Definition altivec.h:8172
static __inline__ vector short __ATTRS_o_ai vec_lvehx(long __a, const short *__b)
Definition altivec.h:4272
static __inline__ void __ATTRS_o_ai vec_stvebx(vector signed char __a, long __b, signed char *__c)
Definition altivec.h:11511
static __inline__ vector int __ATTRS_o_ai vec_vaddsws(vector int __a, vector int __b)
Definition altivec.h:785
static __inline__ int __ATTRS_o_ai vec_any_nlt(vector float __a, vector float __b)
Definition altivec.h:17266
static __inline__ void __ATTRS_o_ai vec_stvrxl(vector signed char __a, int __b, signed char *__c)
Definition altivec.h:14519
static __inline__ vector signed char __ATTRS_o_ai vec_abs(vector signed char __a)
Definition altivec.h:117
static __inline__ void __ATTRS_o_ai vec_stvrx(vector signed char __a, int __b, signed char *__c)
Definition altivec.h:14403
static __inline__ vector signed short __ATTRS_o_ai vec_madd(vector signed short __a, vector signed short __b, vector signed short __c)
Definition altivec.h:4744
static __inline__ vector signed char __ATTRS_o_ai vec_vsel(vector signed char __a, vector signed char __b, vector unsigned char __c)
Definition altivec.h:8750
static __inline__ int __ATTRS_o_ai vec_any_lt(vector signed char __a, vector signed char __b)
Definition altivec.h:16799
static __inline__ vector unsigned char __ATTRS_o_ai vec_xor(vector unsigned char __a, vector unsigned char __b)
Definition altivec.h:13195
static __inline__ vector int __ATTRS_o_ai vec_vminsw(vector int __a, vector int __b)
Definition altivec.h:5937
static __inline__ int __ATTRS_o_ai vec_all_ge(vector signed char __a, vector signed char __b)
Definition altivec.h:14979
static __inline__ vector float __ATTRS_o_ai vec_roundm(vector float __a)
Definition altivec.h:4029
static __inline__ vector unsigned int __ATTRS_o_ai vec_vadduws(vector unsigned int __a, vector unsigned int __b)
Definition altivec.h:803
static __inline__ vector int __ATTRS_o_ai vec_vmaxsw(vector int __a, vector int __b)
Definition altivec.h:5033
static __inline__ vector float __ATTRS_o_ai vec_rsqrte(vector float __a)
Definition altivec.h:8529
static __inline__ int __ATTRS_o_ai vec_all_nle(vector float __a, vector float __b)
Definition altivec.h:15969
static __inline__ vector unsigned char __ATTRS_o_ai vec_vsububs(vector unsigned char __a, vector unsigned char __b)
Definition altivec.h:12246
static __inline__ vector unsigned short __ATTRS_o_ai vec_vminuh(vector unsigned short __a, vector unsigned short __b)
Definition altivec.h:5921
static __inline__ vector signed char __ATTRS_o_ai vec_vspltb(vector signed char __a, unsigned char __b)
Definition altivec.h:10208
static __inline__ vector float __ATTRS_o_ai vec_trunc(vector float __a)
Definition altivec.h:12585
static __inline__ vector short __ATTRS_o_ai vec_vupklsb(vector signed char __a)
Definition altivec.h:12839
static __inline__ vector bool char __ATTRS_o_ai vec_cmpgt(vector signed char __a, vector signed char __b)
Definition altivec.h:2131
static __inline__ vector signed char __ATTRS_o_ai vec_insert(signed char __a, vector signed char __b, int __c)
Definition altivec.h:13656
static __inline__ vector signed char __ATTRS_o_ai vec_sll(vector signed char __a, vector unsigned char __b)
Definition altivec.h:9512
static __inline__ vector signed char __ATTRS_o_ai vec_vsrb(vector signed char __a, vector unsigned char __b)
Definition altivec.h:10475
static __inline__ int __ATTRS_o_ai vec_any_gt(vector signed char __a, vector signed char __b)
Definition altivec.h:16419
static __inline__ vector signed char __ATTRS_o_ai vec_vsro(vector signed char __a, vector signed char __b)
Definition altivec.h:11083
static __inline__ vector bool char __ATTRS_o_ai vec_cmple(vector signed char __a, vector signed char __b)
Definition altivec.h:2369
static __inline__ vector signed char __ATTRS_o_ai vec_vsl(vector signed char __a, vector unsigned char __b)
Definition altivec.h:9699
static __inline__ vector unsigned short __ATTRS_o_ai vec_splat_u16(signed char __a)
Definition altivec.h:10364
static __inline__ vector int __ATTRS_o_ai vec_vadduwm(vector int __a, vector int __b)
Definition altivec.h:543
#define __CR6_EQ
Definition altivec.h:18
static __inline__ int __ATTRS_o_ai vec_all_nlt(vector float __a, vector float __b)
Definition altivec.h:15987
static __inline__ vector signed char __ATTRS_o_ai vec_packs(vector short __a, vector short __b)
Definition altivec.h:7703
static __inline__ vector signed char __ATTRS_o_ai vec_vspltisb(signed char __a)
Definition altivec.h:10316
static __inline__ vector signed char __ATTRS_o_ai vec_vslo(vector signed char __a, vector signed char __b)
Definition altivec.h:9988
static __inline__ vector signed char __ATTRS_o_ai vec_vaddsbs(vector signed char __a, vector signed char __b)
Definition altivec.h:718
static __inline__ vector signed char __ATTRS_o_ai vec_div(vector signed char __a, vector signed char __b)
Definition altivec.h:3772
static __inline__ vector int __ATTRS_o_ai vec_msums(vector short __a, vector short __b, vector int __c)
Definition altivec.h:6113
static __inline__ vector signed char __ATTRS_o_ai vec_vor(vector signed char __a, vector signed char __b)
Definition altivec.h:7209
static __inline__ int __ATTRS_o_ai vec_any_eq(vector signed char __a, vector signed char __b)
Definition altivec.h:16021
static __inline__ vector float __ATTRS_o_ai vec_roundz(vector float __a)
Definition altivec.h:12600
static __inline__ int __ATTRS_o_ai vec_any_nle(vector float __a, vector float __b)
Definition altivec.h:17248
static __inline__ vector signed char __ATTRS_o_ai vec_sub(vector signed char __a, vector signed char __b)
Definition altivec.h:11857
static __inline__ vector short __ATTRS_o_ai vec_vsrah(vector short __a, vector unsigned short __b)
Definition altivec.h:10583
static __inline__ vector float __ATTRS_o_ai vec_nmsub(vector float __a, vector float __b, vector float __c)
Definition altivec.h:6687
static __inline__ vector unsigned char __ATTRS_o_ai vec_splat_u8(unsigned char __a)
Definition altivec.h:10356
static __inline__ vector unsigned int __ATTRS_o_ai vec_vsubuws(vector unsigned int __a, vector unsigned int __b)
Definition altivec.h:12314
static __inline__ void int __a
Definition emmintrin.h:3976
__PTRDIFF_TYPE__ ptrdiff_t
A signed integer type that is the result of subtracting two pointers.
#define NULL
Definition stddef.h:89